共用方式為


使用 Azure 儲存體帳戶收集 Apache Spark 應用程式記錄和計量 (預覽版)

Fabric Apache Spark 診斷發出器擴充功能是一個程式庫,可讓 Apache Spark 應用程式將記錄、事件記錄和計量發出至多個目的地,包括 Azure 記錄分析、Azure 儲存體和 Azure 事件中樞。

在本教學課程中,您將了解如何使用 Fabric Apache Spark 診斷發出器擴充功能,將 Apache Spark 應用程式記錄、事件記錄和計量傳送至您的 Azure 儲存體帳戶。

將記錄和計量收集到記憶體帳戶

步驟 1:建立儲存體帳戶

若要收集診斷記錄和計量,您可以使用現有的 Azure 儲存體帳戶。 如果您沒有 Azure Blob 記憶體帳戶,可以 建立 Azure Blob 記憶體帳戶 ,或 建立記憶體帳戶來與 Azure Data Lake Storage Gen2 搭配使用。

步驟 2:使用 Apache Spark 設定建立 Fabric 環境工藝品

選項 1:使用 Azure 儲存體 URI 和存取金鑰進行設定

  1. 在 Fabric 中建立 Fabric 環境工藝品

  2. 將具有適當值的下列 Spark 屬性 新增至環境成品,或選取 功能區中的 [從.yml 新增],以下載 已包含下列屬性的範例 yaml 檔案

    spark.synapse.diagnostic.emitters: MyStorageBlob
    spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage"
    spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyStorageBlob.uri:  "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>"
    spark.synapse.diagnostic.emitter.MyDestination1.auth: "AccessKey"
    spark.synapse.diagnostic.emitter.MyDestination1.secret: <storage-access-key>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    在設定檔案視窗中,填滿下列參數:<my-blob-storage><container-name><folder-name><storage-access-key>。 如需這些參數的詳細資訊,請參閱 Azure 儲存體組態

選項 2:使用 Azure Key Vault 設定

注意

已知問題:暫時無法使用選項 2 啟動工作階段。 目前,將秘密儲存在 金鑰保存庫 會防止 Spark 工作階段啟動。 請使用選項 1 中所述的方法來設定它的優先順序。

確保提交 Apache Spark 應用程式的使用者擁有讀取祕密權限。 如需詳細資訊,請參閱透過 Azure 角色型存取控制,提供 Key Vault 金鑰、憑證和密碼的存取權 (預覽)

若要設定 Azure Key Vault 以儲存工作區金鑰,請執行下列步驟

  1. 在 Azure 入口網站中建立並移至您的金鑰保存庫。

  2. 在金鑰保存庫的設定頁面中,選取 [祕密],然後選取 [產生/匯入]

  3. [建立祕密]畫面中,選擇下列值:

    • 名稱:輸入祕密的名稱。
    • [值]:輸入密碼的 <storage-access-key>
    • 將其他值保留為其預設值。 然後選取建立
  4. 在 Fabric 中建立 Fabric 環境工藝品。

  5. 新增下列 Spark 屬性。 或選取功能區上的 [從.yml 新增],以上傳包含下列 Spark 屬性的範例 yaml 檔案

    spark.synapse.diagnostic.emitters: <MyStorageBlob>
    spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage"
    spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyStorageBlob.uri:  "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>"
    spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "AccessKey"
    spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    在設定檔案視窗中,填滿下列參數:<my-blob-storage><container-name><folder-name><AZURE_KEY_VAULT_NAME><AZURE_KEY_VAULT_SECRET_KEY_NAME>。 如需這些參數的詳細資訊,請參閱 Azure 儲存體組態

  6. 儲存並發佈變更。

步驟 3:將環境工藝品附加至筆記本或 Spark 工作定義,或將其設定為工作區預設值

若要將環境附加至 Notebooks 或 Spark 工作定義

  1. 瀏覽至 Fabric 中的特定筆記本或 Spark 工作定義。
  2. 選取主索引標籤上的 [環境] 功能表,然後選取已設定診斷 Spark 屬性的環境。
  3. 當您啟動 Spark 工作階段時,會套用設定。

若要將環境設定為工作區預設值

  1. 在 Fabric 中,瀏覽至 [工作區設定]。
  2. 在工作區設定中尋找 Spark 設定 (工作區設定 -> 資料工程/科學 -> Spark 設定)
  3. 選取 [環境] 索引標籤,然後選擇已設定診斷 Spark 屬性的環境,然後按下 [儲存]

注意

只有工作區管理員可以管理工作區設定。 此處所做的變更會套用至連結至工作區設定的所有筆記本和 Spark 工作定義。 如需詳細資訊,請參閱 Fabric 工作區設定

步驟 4:檢視 Azure 儲存體帳戶中的記錄檔案

將工作提交至已設定的 Spark 工作階段之後,您可以檢視目的地儲存體帳戶中的記錄和計量檔案。 記錄會根據 <workspaceId>.<fabricLivyId> 所識別的不同應用程式,儲存在對應的路徑中。 所有記錄檔都是 JSON Line 格式 (也稱為換行分隔的 JSON 或 ndjson),這方便資料處理。

可用設定

組態 描述
spark.synapse.diagnostic.emitters 必要。 以逗號分隔的診斷發出器目的地名稱。 例如,MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type 必要。 內建目的地類型。 若要啟用 Azure 儲存體目的地,AzureStorage 必須包含在此欄位中。
spark.synapse.diagnostic.emitter.<destination>.categories 選擇性。 以逗號分隔的選取記錄類別。 可用的值包括:DriverLogExecutorLogEventLogMetrics。 如果未設定,則預設值為所有類別。
spark.synapse.diagnostic.emitter.<destination>.auth 必要。 AccessKey 用於使用記憶體帳戶存取金鑰授權。 SAS 用於共用存取簽章授權。
spark.synapse.diagnostic.emitter.<destination>.uri 必要。 目的地 Blob 容器資料夾 URI。 應該符合模式 https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>
spark.synapse.diagnostic.emitter.<destination>.secret 選擇性。 祕密 (AccessKey 或 SAS) 內容。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault 如果未指定 .secret,則為必要。 儲存祕密 (AccessKey 或 SAS) 的 Azure Key Vault 名稱。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName 如果指定 .secret.keyVault,則為必要。 儲存祕密 (AccessKey 或 SAS) 的 Azure Key Vault 祕密名稱。
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match 選擇性。 以逗號分隔的 spark 事件名稱,您可以指定要收集哪些事件。 例如:SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match 選擇性。 以逗號分隔的 Log4j 記錄器名稱,您可以指定要收集哪些記錄。 例如:org.apache.spark.SparkContext,org.example.Logger
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match 選擇性。 以逗號分隔的 spark 計量名稱後置詞,您可以指定要收集哪些計量。 例如:jvm.heap.used
spark.fabric.pools.skipStarterPools 必要。 此 Spark 屬性是用來強制隨選 Spark 工作階段。 使用預設集區時,您應該將值設定為 True,以觸發程式庫來發出記錄和計量。

記錄資料範例

以下是 JSON 格式的記錄範例:

{
  "timestamp": "2024-09-06T03:09:37.235Z",
  "category": "Log|EventLog|Metrics",
  "fabricLivyId": "<fabric-livy-id>",
  "applicationId": "<application-id>",
  "applicationName": "<application-name>",
  "executorId": "<driver-or-executor-id>",
  "fabricTenantId": "<my-fabric-tenant-id>",
  "capacityId": "<my-fabric-capacity-id>",
  "artifactType": "SynapseNotebook|SparkJobDefinition",
  "artifactId": "<my-fabric-artifact-id>",
  "fabricWorkspaceId": "<my-fabric-workspace-id>",
  "fabricEnvId": "<my-fabric-environment-id>",
  "executorMin": "<executor-min>",
  "executorMax": "<executor-max>",
  "isHighConcurrencyEnabled": "true|false",
  "properties": {
    // The message properties of logs, events and metrics.
    "timestamp": "2024-09-06T03:09:37.235Z",
    "message": "Initialized BlockManager: BlockManagerId(1, vm-04b22223, 34319, None)",
    "logger_name": "org.apache.spark.storage.BlockManager",
    "level": "INFO",
    "thread_name": "dispatcher-Executor"
    //...
  }
}

具有受控虛擬網路的 Fabric 工作區

為目標 Azure Blob 儲存體建立受控私人端點。 如需詳細指示,請參閱在 Microsoft Fabric 中建立和使用受控私人端點 - Microsoft Fabric

一旦受控私人端點獲得核准,使用者就可以開始向目標 Azure Blob 儲存體發出記錄和計量。

下一步