使用 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 和存取金鑰進行設定
在 Fabric 中建立 Fabric 環境工藝品
將具有適當值的下列 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 以儲存工作區金鑰,請執行下列步驟
在 Azure 入口網站中建立並移至您的金鑰保存庫。
在金鑰保存庫的設定頁面中,選取 [祕密],然後選取 [產生/匯入]。
在 [建立祕密]畫面中,選擇下列值:
- 名稱:輸入祕密的名稱。
- [值]:輸入密碼的
<storage-access-key>
。 - 將其他值保留為其預設值。 然後選取建立。
在 Fabric 中建立 Fabric 環境工藝品。
新增下列 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 儲存體組態。儲存並發佈變更。
步驟 3:將環境工藝品附加至筆記本或 Spark 工作定義,或將其設定為工作區預設值
若要將環境附加至 Notebooks 或 Spark 工作定義:
- 瀏覽至 Fabric 中的特定筆記本或 Spark 工作定義。
- 選取主索引標籤上的 [環境] 功能表,然後選取已設定診斷 Spark 屬性的環境。
- 當您啟動 Spark 工作階段時,會套用設定。
若要將環境設定為工作區預設值:
- 在 Fabric 中,瀏覽至 [工作區設定]。
- 在工作區設定中尋找 Spark 設定 (工作區設定 -> 資料工程/科學 -> Spark 設定)。
- 選取 [環境] 索引標籤,然後選擇已設定診斷 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 |
選擇性。 以逗號分隔的選取記錄類別。 可用的值包括:DriverLog 、ExecutorLog 、EventLog 、Metrics 。 如果未設定,則預設值為所有類別。 |
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 儲存體發出記錄和計量。