監控及排解 Dataproc Serverless 批次工作負載的問題

本文件說明如何使用 Spark UI 監控及排解 Dataproc Serverless for Spark 批次工作負載的問題。

Spark UI

Spark UI 會從 Dataproc Serverless 收集 Apache Spark 執行詳細資料,以便處理 Spark 批次工作負載。Spark UI 功能預設為啟用狀態,不需額外付費。

Spark UI 功能收集的資料會保留 90 天。您可以使用這個網頁介面監控及偵錯 Spark 工作負載,而無須建立永久記錄伺服器

所需的 Identity and Access Management 權限和角色

如要搭配批次工作負載使用 Spark UI 功能,必須具備下列權限。

  • 資料收集權限:dataproc.batches.sparkApplicationWrite。您必須將此權限授予執行批次工作負載的服務帳戶。這項權限包含在 Dataproc Worker 角色中,系統會自動將該角色授予 Dataproc Serverless 預設使用的 Compute Engine 預設服務帳戶 (請參閱 Dataproc Serverless 服務帳戶)。不過,如果您為批次工作負載指定自訂服務帳戶,則必須為該服務帳戶新增 dataproc.batches.sparkApplicationWrite 權限 (通常是授予服務帳戶 Dataproc Worker 角色)。

  • Spark UI 存取權限:dataproc.batches.sparkApplicationRead。您必須將這項權限授予使用者,才能在Google Cloud 控制台中存取 Spark UI。此權限包含在 Dataproc ViewerDataproc EditorDataproc Administrator 角色中。如要在 Google Cloud 主控台中開啟 Spark UI,您必須具備下列其中一個角色,或是具備包含此權限的自訂角色。

開啟 Spark UI

Google Cloud 控制台提供 Spark 批次工作負載的 Spark UI 頁面。

  1. 前往 Dataproc Serverless 互動工作階段頁面。

    前往 Dataproc 的「Batches」(批次) 專區

  2. 按一下「批次 ID」,開啟批次詳細資料頁面。

  3. 按一下頂端選單中的「View Spark UI」

在下列情況下,「View Spark UI」按鈕會停用:

  • 如果未授予必要權限
  • 如果您在「批次詳細資料」頁面中取消勾選「啟用 Spark UI」核取方塊
  • 如果您在提交批次工作負載時將 spark.dataproc.appContext.enabled 屬性設為 false

永久記錄伺服器

Dataproc Serverless for Spark 會建立執行工作負載所需的運算資源,並在這些資源上執行工作負載,然後在工作負載完成後刪除這些資源。工作負載完成後,工作負載指標和事件就不會保留。不過,您可以使用持續性記錄伺服器 (PHS),在 Cloud Storage 中保留工作負載應用程式記錄 (事件記錄)。

如要將 PHS 與批次工作負載搭配使用,請執行下列操作:

  1. 建立 Dataproc 永久記錄伺服器 (PHS)

  2. 提交工作負載時,請指定 PHS。

  3. 使用元件閘道連線至 PHS,查看應用程式詳細資料、排程器階段、工作層級詳細資料,以及環境和執行者資訊。

Dataproc Serverless for Spark 記錄

根據預設,Dataproc Serverless for Spark 會啟用記錄功能,且工作負載完成後,工作負載記錄會保留。Dataproc Serverless for Spark 會在 Cloud Logging 中收集工作負載記錄。您可以在記錄檔探索工具的 Cloud Dataproc Batch 資源下方存取 Dataproc Serverless for Spark 記錄。

查詢 Dataproc Serverless for Spark 記錄

Google Cloud 控制台的記錄檔探索工具提供查詢窗格,可協助您建立查詢,以便檢查批次工作負載記錄。您可以按照下列步驟建立查詢,以便檢查批次工作負載記錄:

  1. 前往「Logs Explorer」頁面

  2. 系統會選取目前的專案。您可以點選「Refine scope Project」,選取其他專案。
  3. 定義批次記錄查詢。

    • 使用篩選器選單篩選批次工作負載。

      1. 在「所有資源」下方,選取「Cloud Dataproc Batch」資源。

        1. 在「Select resource」面板中,依序選取「LOCATION」和「BATCH ID」。這些批次參數會列於 Google Cloud 控制台的 Dataproc「Batches頁面。

        2. 按一下 [套用]

        3. 在「Select log names」下方,在「Search log names」方塊中輸入 dataproc.googleapis.com,即可限制要查詢的記錄類型。選取清單中的一或多個記錄檔名稱。

    • 使用查詢編輯器篩選虛擬機器專屬記錄。

      1. 指定資源類型和 VM 資源名稱,如以下範例所示:

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        注意事項:

        • BATCH_UUID:批次 UUID 會列於 Google Cloud 控制台的「Batch details」(批次詳細資料) 頁面中,只要按一下「Batches」頁面上的「Batch ID」(批次 ID),即可開啟該頁面。

        批次記錄也會在 VM 資源名稱中列出批次 UUID。以下是批次 driver.log 的範例:

  4. 點選「執行查詢」

Dataproc Serverless for Spark 記錄類型和查詢範例

下表說明各種 Dataproc Serverless 記錄類型,並提供各個記錄類型的 Logs Explorer 查詢範例。

  1. dataproc.googleapis.com/output:這個記錄檔案包含批次工作負載輸出內容。Dataproc Serverless for Spark 會將批次輸出內容串流至 output 命名空間,並將檔案名稱設為 JOB_ID.driver.log

    輸出記錄的 Logs Explorer 查詢範例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/sparkspark 命名空間會匯總在 Dataproc 叢集主機和工作機 VM 上執行的守護程序和執行緒的 Spark 記錄。每個記錄項目都包含 masterworkerexecutor 元件標籤,用於識別記錄來源,如下所示:

    • executor:使用者程式碼執行者產生的記錄。這些通常是分散式記錄。
    • master:Spark 獨立資源管理員主控台的記錄,類似於在 Compute Engine YARN 上執行 Dataproc 的 ResourceManager 記錄。
    • worker:Spark 獨立資源管理員 worker 的記錄,類似於 Compute Engine YARN NodeManager 記錄中的 Dataproc。

    查詢 spark 命名空間中所有記錄檔的 Logs Explorer 查詢範例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    針對 spark 命名空間中的 Spark 獨立元件記錄檔,記錄檔探索工具查詢範例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startupstartup 命名空間包含批次 (叢集) 啟動記錄。並包含任何初始化指令碼記錄。元件會透過標籤識別,例如:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    針對指定 VM 上的啟動記錄,使用 Logs Explorer 查詢範例:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agentagent 命名空間會匯總 Dataproc 代理程式記錄。每個記錄項目都包含檔案名稱標籤,用於識別記錄來源。

    針對特定工作 VM 產生的代理程式記錄檔,使用 Logs Explorer 查詢的範例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscalerautoscaler 命名空間會匯總 Dataproc Serverless for Spark 的 autoscaler 記錄。

    針對特定工作 VM 產生的代理程式記錄檔,使用 Logs Explorer 查詢的範例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

詳情請參閱「Dataproc 記錄」。

Dataproc Serverless 稽核記錄檔

如要瞭解 Dataproc Serverless 稽核記錄,請參閱「Dataproc 稽核記錄」一文。

工作負載指標

根據預設,Dataproc Serverless for Spark 會啟用可用的 Spark 指標收集功能,除非您使用Spark 指標收集屬性停用或覆寫一或多個 Spark 指標的收集作業。

您可以前往 Metrics Explorer 或 Google Cloud 控制台的「批次詳細資料」頁面查看工作負載指標。

批次指標

Dataproc batch 資源指標可提供批次資源的深入分析資料,例如批次執行器的數量。批次指標的前置字串為 dataproc.googleapis.com/batch

Metrics Explorer 中的批次指標範例。

Spark 指標

可用的 Spark 指標包括 Spark 驅動程式和執行緒指標,以及系統指標。可用的 Spark 指標前置 custom.googleapis.com/

Metrics Explorer 中的 Spark 指標範例。

設定指標警告

您可以建立 Dataproc 指標快訊,以便收到工作負載問題的通知。

建立圖表

您可以使用Google Cloud 主控台中的 Metrics Explorer,建立可視覺化工作負載指標的圖表。舉例來說,您可以建立圖表來顯示 disk:bytes_used,然後依 batch_id 篩選。

Cloud Monitoring

監控功能會使用工作負載中繼資料和指標,提供 Dataproc Serverless for Spark 工作負載的健康狀態和效能洞察資料。工作負載指標包括 Spark 指標、批次指標和作業指標。

您可以使用 Google Cloud 控制台中的 Cloud Monitoring 探索指標、新增圖表、建立資訊主頁和快訊。

建立資訊主頁

您可以建立資訊主頁,使用來自多個專案和不同 Google Cloud 產品的指標來監控工作負載。詳情請參閱「建立及管理自訂資訊主頁」。

Gemini Cloud Assist (預先發布版)

Gemini Cloud Assist 調查目前為不公開預先發布版。Dataproc Serverless 批次的「調查」功能適用於下列區域:

  • asia-east1
  • asia-southeast1
  • europe-west1
  • us-central1

這項功能會運用 Gemini 的進階功能,協助您完成下列疑難排解工作:

  • 透過 Google Cloud 控制台的「批次」清單和「批次詳細資料」頁面,針對多個途徑 (包括即時通訊和記錄) 中的失敗和執行速度緩慢的無伺服器 Spark 批次工作建立疑難排解調查。
  • 在執行調查前,請先為問題加入自然語言背景說明。
  • 執行調查,取得 Gemini 針對問題根本原因和建議修正方式的洞察資料。
  • 輕鬆建立客服案件。

如需瞭解詳情,請參閱進一步瞭解 Gemini

使用預先發布版功能

如要申請 Gemini Cloud Assist 功能的預先發布版,請提交 Gemini Cloud Assist「信任的測試人員」計畫表單。Google Cloud 團隊會與您聯絡,說明後續步驟。

進階疑難排解 (預先發布版)

本節將說明 Google Cloud 控制台中提供的進階疑難排解功能 (預先發布版)。這些功能包括Gemini 協助排解 Dataproc Serverless 問題,這是 Gemini in BigQuery 服務的一部分。

使用預先發布版功能

如要申請預先發布版的進階疑難排解功能,請提交 Gemini Cloud Assist「信任的測試人員」計畫表單。Google Cloud 團隊會與您聯絡,說明後續步驟。

預覽價格

參與不公開預先發布版不會產生額外費用。當下列功能正式推出 (GA)後,就會開始收費。

我們會在 GA 發布前,將 GA 費用的相關資訊傳送至您在預覽版註冊表單中提供的電子郵件地址。

功能需求

  • 註冊:你必須註冊這項功能。

  • 權限:您必須具備 dataproc.batches.analyze 權限。

    gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \
    --add-permissions="dataproc.batches.analyze"
    
  • 為 Dataproc Serverless 啟用 Gemini 協助疑難排解功能:當您使用Google Cloud 主控台、gcloud CLI 或 Dataproc API 提交每個定期 Spark 批次工作負載時,就會為 Dataproc Serverless 啟用 Gemini 協助疑難排解功能。在定期批次工作負載上啟用這項功能後,Dataproc 會將工作負載記錄的副本儲存 30 天,並使用已儲存的記錄資料,為工作負載提供 Gemini 協助疑難排解服務。如要瞭解 Spark 工作負載記錄內容,請參閱 Dataproc Serverless for Spark 記錄

控制台

請按照下列步驟操作,為每個定期的 Spark 批次工作負載啟用 Gemini 協助疑難排解功能:

  1. 在 Google Cloud 控制台中,前往 Dataproc 的「Batches」頁面。

    前往 Dataproc 的「Batches」(批次) 專區

  2. 如要建立批次工作負載,請按一下「Create」

  3. 在「Container」部分,填入「Cohort」名稱,用於識別該批次為一系列週期性工作負載的其中一個。系統會將 Gemini 輔助分析套用至以此同類群組名稱提交的第二個工作負載和後續工作負載。舉例來說,如果排程工作負載會執行每日 TPC-H 查詢,請將 TPCH-Query1 指定為同類群組名稱。

  4. 視需要填寫「Create batch」頁面的其他部分,然後按一下「Submit」。詳情請參閱「提交批次工作負載」。

gcloud

在本機終端機視窗或 Cloud Shell 中執行下列 gcloud CLI gcloud dataproc batches submit 指令,為每個週期性 Spark 批次工作負載啟用 Gemini 協助疑難排解功能:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

更改下列內容:

  • COMMAND:Spark 工作負載類型,例如 SparkPySparkSpark-SqlSpark-R
  • REGION:工作負載執行的區域
  • COHORT:同類群組名稱,用於識別批次是一系列週期性工作負載的其中一個。Gemini 輔助分析會套用至以此同類群組名稱提交的第二個工作負載和後續工作負載。舉例來說,您可以將 TPCH Query 1 指定為排程工作負載的組群名稱,以便執行每日 TPC-H 查詢。

API

batches.create 要求中加入 RuntimeConfig.cohort 名稱,即可在每個定期的 Spark 批次工作負載上啟用 Gemini 輔助疑難排解功能。系統會將 Gemini 輔助分析套用至以此同類群組名稱提交的第二個工作負載和後續工作負載。舉例來說,如果排程工作負載每天執行 TPC-H 查詢,請將 TPCH-Query1 指定為同類群組名稱。

範例:

...
runtimeConfig:
  cohort: TPCH-Query1
...

透過 Gemini 協助排解 Dataproc Serverless 問題

Google Cloud 控制台的「批次詳細資料」和「批次」清單頁面提供下列 Gemini 輔助疑難排解預覽功能。

  • 「Investigate」分頁:「Batch details」頁面中的「Investigate」分頁提供「Health Overview (Preview)」(健康總覽 (預先發布版)) 專區,其中包含下列 Gemini 輔助疑難排解面板:

    • 目前狀況因應方式按一下「Ask Gemini」,即可要求系統提供建議,以便修正失敗的工作負載,或改善成功但速度緩慢的工作負載。

    「Ask Gemini」按鈕。

    點選「Ask Gemini」後,Gemini for Google Cloud 會根據工作負載記錄、Spark 指標和 Spark 事件,產生摘要,列出所有錯誤、異常或重點。Gemini for Google Cloud 也能列出建議步驟清單,協助您修正失敗的工作負載,或改善成功但速度緩慢的工作負載。

    Gemini 為 Google Cloud產生的洞察資料。

  • Gemini 輔助疑難排解資料欄:在預先發布版中,Google Cloud 控制台的 Dataproc「Batches」清單頁面包含 What is happening now?What can I do about it? 資料欄。

    批次列出 Gemini 資料欄。

    只有在已完成的批次處於 FailedCancelledSucceeded 狀態時,系統才會顯示並啟用「問問 Gemini」按鈕。點選「Ask Gemini」後, Google Cloud版 Gemini 會根據工作負載記錄、Spark 指標和 Spark 事件,產生任何錯誤、異常或重點的摘要。Gemini for Google Cloud 也能列出建議步驟清單,協助您修正失敗的工作負載,或改善成功但速度緩慢的工作負載。

批次指標重點

預覽版的一部分, Google Cloud 控制台中的「批次詳細資料」頁面會提供顯示重要批次工作負載指標值的圖表。批次完成後,指標圖表會填入值。

批次指標資訊主頁。

指標表

下表列出 Google Cloud 主控台「Batch details」頁面顯示的 Spark 工作負載指標,並說明指標值如何提供工作負載狀態和效能相關洞察資訊。

指標 顯示什麼內容?
執行緒層級指標
JVM GC 時間與執行時間的比率 這項指標會顯示 JVM GC (垃圾收集) 時間與每個執行者的執行時間比率。高比率可能表示在特定執行緒上執行的工作中發生記憶體外洩,或是資料結構效率不佳,進而導致物件流失率偏高。
溢出的磁碟位元組 這項指標會顯示在不同執行緒之間溢出的磁碟位元組總數。如果執行緒顯示大量溢出的磁碟位元組,可能表示資料出現偏差。如果指標隨著時間增加,可能表示有記憶體壓力或記憶體流失的階段。
讀取和寫入的位元組數 這項指標會顯示每個執行緒的寫入位元組數與讀取位元組數。如果讀取或寫入的位元組有很大差異,可能表示複製的彙整作業會在特定執行緒上造成資料放大。
讀取和寫入的記錄 這項指標會顯示每個執行緒讀取和寫入的記錄。大量讀取記錄與少量寫入記錄,可能表示特定執行緒的處理邏輯出現瓶頸,導致在等待期間讀取記錄。如果執行緒在讀取和寫入作業中持續出現延遲,可能表示這些節點發生資源爭用情形,或是執行緒專屬程式碼效率不佳。
重組寫入時間與執行時間的比率 這項指標會顯示執行緒在隨機播放執行階段中花費的時間,相較於整體執行時間。如果某些執行緒的這個值偏高,可能表示資料偏移或資料序列化效率不佳。您可以在 Spark UI 中找出有長時間排序寫入時間的階段。請找出這些階段中耗時超過平均值的異常工作。請檢查 shuffle 寫入時間較長的執行緒是否也顯示高磁碟 I/O 活動。您可以採用更有效率的序列化和其他分割步驟來解決這個問題。相較於記錄讀取,如果記錄寫入量非常大,可能表示由於不良的彙整或不正確的轉換,導致資料重複。
應用程式層級指標
階段進展 這項指標會顯示失敗、等待和執行中階段的數量。如果有大量失敗或等待中的階段,可能表示資料有偏差。請檢查資料分區,並使用 Spark UI 中的「Stages」分頁,找出階段失敗的原因。
批次 Spark 執行器 這項指標會顯示可能需要的執行者數量,以及執行中的執行者數量。必要執行者和執行中執行者的差異很大,可能表示自動調整大小的問題。
VM 層級指標
已使用的記憶體 這項指標會顯示 VM 記憶體使用率百分比。如果主百分比偏高,可能表示驅動程式處於記憶體壓力下。對於其他 VM 節點,高百分比可能表示執行緒已耗盡記憶體,這可能導致磁碟溢位,並使工作負載執行時間變慢。使用 Spark UI 分析執行緒,檢查 GC 時間和任務失敗率是否過高。並對 Spark 程式碼進行偵錯,以便快取大型資料集和不必要的變數廣播。

工作記錄

在預覽版中, Google Cloud 控制台的「Batch details」頁面會列出工作 (批次工作負載) 記錄。記錄檔包含從工作負載輸出內容和 Spark 記錄檔篩選出的警告和錯誤。您可以選取記錄「嚴重性」、新增「篩選器」,然後按一下「在記錄檔探索工具中查看」圖示,在「記錄檔探索工具」中開啟所選的批次記錄。

範例:在 Google Cloud 控制台的「批次詳細資料」頁面上,從「嚴重性」選取器中選擇 Errors 後,系統會開啟「Logs Explorer」

批次記錄檔探索工具。