分享方式:


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

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

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

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

步驟 1:建立記憶體帳戶

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

步驟 2:建立 Apache Spark 組態檔

建立 diagnostic-emitter-azure-storage-conf.txt 並將下列內容複製到 檔案。 或下載 Apache Spark 集區組態的範例範本檔案

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureStorage
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.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>

在組態檔中填入下列參數:<my-blob-storage>、、<folder-name><container-name><storage-access-key>。 如需參數的詳細描述,您可以參考 Azure 儲存體 組態

步驟 3:將 Apache Spark 配置文件上傳至 Synapse Studio,並在 Spark 集區中使用

  1. 開啟 [Apache Spark 組態] 頁面 (管理 -> Apache Spark 組態)。
  2. 按兩下 [ 入] 按鈕,將 Apache Spark 配置檔上傳至 Synapse Studio。
  3. 流覽至 Synapse Studio 中的 Apache Spark 集區(管理 -> Apache Spark 集區)。
  4. 按兩下 Apache Spark 集區右側的 [...] 按鈕,然後選取 [Apache Spark 組態]。
  5. 您可以選取您剛才在下拉功能表中上傳的組態檔。
  6. 選取組態檔之後,按兩下 [ 套用 ]。

步驟 4:檢視 Azure 記憶體帳戶中的記錄檔

將作業提交至已設定的 Apache Spark 集區之後,您應該能夠查看目的地記憶體帳戶中的記錄和計量檔案。 記錄會根據 不同的應用程式 <workspaceName>.<sparkPoolName>.<livySessionId>,放置在對應的路徑中。 所有記錄檔都會使用 JSON 行格式(也稱為換行分隔 JSON,ndjson),這方便數據處理。

可用設定

組態 描述
spark.synapse.diagnostic.emitters 必要。 診斷發出器的逗號分隔目的地名稱。 例如,MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type 必要。 內建目的地類型。 若要啟用 Azure 記憶體目的地, AzureStorage 必須包含在此欄位中。
spark.synapse.diagnostic.emitter.<destination>.categories 選擇性。 以逗號分隔的選取記錄類別。 可用的值包括DriverLog、、EventLogExecutorLogMetrics。 如果未設定,則預設值為 所有 類別。
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 指定,則為必要。 儲存 秘密的 Azure 金鑰保存庫 名稱(AccessKey 或 SAS)。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName 如果 .secret.keyVault 指定 ,則為必要。 儲存秘密的 Azure Key Vault 秘密名稱(AccessKey 或 SAS)。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService 選擇性。 Azure Key Vault 連結服務名稱。 在 Synapse 管線中啟用時,您必須從 AKV 取得秘密。 (請確定 MSI 具有 AKV 的讀取許可權)。
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

記錄數據範例

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

{
    "timestamp": "2021-01-02T12:34:56.789Z",
    "category": "Log|EventLog|Metrics",
    "workspaceName": "<my-workspace-name>",
    "sparkPool": "<spark-pool-name>",
    "livyId": "<livy-session-id>",
    "applicationId": "<application-id>",
    "applicationName": "<application-name>",
    "executorId": "<driver-or-executor-id>",
    "properties": {
        // The message properties of logs, events and metrics.
        "timestamp": "2021-01-02T12:34:56.789Z",
        "message": "Registering signal handler for TERM",
        "logger_name": "org.apache.spark.util.SignalUtils",
        "level": "INFO",
        "thread_name": "main"
        // ...
    }
}

Synapse 工作區已啟用資料外流保護

Azure Synapse Analytics 工作區支援為工作區啟用資料外流保護。 透過外洩保護,記錄和計量無法直接傳送至目的地端點。 您可以為不同的目的地端點建立對應的 受控私人端點 ,或 在此案例中建立IP防火牆規則

  1. 流覽至 [Synapse Studio > 管理>受控私人端點],按兩下 [新增] 按鈕,選取 [Azure Blob 儲存體] 或 [Azure Data Lake Storage Gen2],然後繼續

    建立受控私人端點 1

    注意

    我們可以同時支援 Azure Blob 儲存體 和 Azure Data Lake Storage Gen2。 但是我們無法剖析 abfss:// 格式。 Azure Data Lake Storage Gen2 端點應格式化為 Blob URL:

    https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> 
    
  2. 在記憶體帳戶名稱中選擇您的 Azure 儲存體 帳戶,然後按下 [建立] 按鈕。

    建立受控私人端點 2

  3. 等候幾分鐘佈建私人端點。

  4. 在 [網络>私人端點連線] 頁面上,流覽至 Azure 入口網站 中的記憶體帳戶,選取布建的連線並核准。