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

本文說明可用於監控及排解 Serverless for Apache Spark 批次工作負載問題的工具和檔案。

透過 Google Cloud 控制台排解工作負載問題

如果批次作業失敗或成效不佳,建議您先從 Google Cloud 控制台的「Batches」(批次)頁面,開啟該作業的「Batch details」(批次詳細資料) 頁面。

使用「摘要」分頁:疑難排解中心

開啟「批次詳細資料」頁面時,系統預設會選取「摘要」分頁,顯示重要指標和經過篩選的記錄,協助您快速初步評估批次健康狀態。完成初步評估後,您可以使用「批次詳細資料」頁面上的專業工具進行深入分析,例如 Spark UI記錄檔探索器Gemini Cloud Assist

批次指標重點

「批次詳細資料」頁面的「摘要」分頁包含圖表,顯示重要的批次工作負載指標值。指標圖表會在完成後填入資料,並以視覺化方式指出潛在問題,例如資源爭用、資料偏斜或記憶體壓力。

批次指標資訊主頁。

指標表格

下表列出 Google Cloud 控制台「批次詳細資料」頁面中顯示的 Spark 工作負載指標,並說明指標值如何提供工作負載狀態和效能的深入分析。

指標 顯示內容
執行器層級的指標
JVM 垃圾收集時間與執行階段的比例 這項指標會顯示每個執行器的 JVM GC (垃圾收集) 時間與執行階段的比率。高比率可能表示在特定執行器上執行的工作發生記憶體洩漏,或是資料結構效率不彰,導致物件流失率偏高。
溢出至磁碟的位元組數 這項指標顯示不同執行器溢出的磁碟位元組總數。如果執行器顯示溢出的磁碟位元組數偏高,可能表示資料偏斜。如果指標隨著時間增加,可能表示有階段出現記憶體壓力或記憶體流失。
讀取和寫入的位元組數 這項指標會顯示每個執行程式寫入的位元組數與讀取的位元組數。如果讀取或寫入的位元組數有大幅差異,可能表示複製的聯結導致特定執行器上的資料放大。
讀取和寫入的記錄 這項指標會顯示每個執行程式讀取和寫入的記錄。如果讀取的記錄數量較多,但寫入的記錄數量較少,可能表示特定執行器的處理邏輯出現瓶頸,導致系統在等待時讀取記錄。如果執行器持續在讀取和寫入作業中發生延遲,可能表示這些節點發生資源爭用,或是執行器專屬程式碼效率不彰。
重組寫入時間與執行時間的比率 這項指標會顯示執行器在 Shuffle 執行階段所花費的時間,與整體執行階段相比的比例。如果部分執行器的這個值偏高,可能表示資料傾斜或資料序列化效率不彰。 您可以在 Spark UI 中找出改組寫入時間較長的階段。找出這些階段中完成時間超過平均值的異常工作。檢查洗牌寫入時間較長的執行器是否也顯示磁碟 I/O 活動較高。更有效率的序列化和額外的分割步驟可能有幫助。如果寫入的記錄遠多於讀取的記錄,可能表示因聯結效率不彰或轉換錯誤,導致資料重複。
應用程式層級的指標
階段進展 這項指標會顯示失敗、等待和執行階段的階段數。如果失敗或等待的階段數量過多,可能表示資料偏斜。檢查資料分區,並使用 Spark UI 中的「Stages」分頁,偵錯階段失敗的原因。
批次 Spark 執行器 這項指標會顯示可能需要的執行者數量,以及正在執行的執行者數量。如果必要執行器和執行中的執行器之間有很大差異,可能表示自動調度資源有問題。
VM 層級指標
已使用的記憶體 這項指標會顯示 VM 記憶體的使用百分比。如果主機百分比偏高,可能表示驅動程式的記憶體壓力過大。如果是其他 VM 節點,百分比偏高可能表示執行器記憶體不足,導致磁碟溢出量偏高,工作負載執行時間也較長。使用 Spark UI 分析執行器,檢查 GC 時間是否過長,以及工作失敗次數是否過多。此外,您也可以偵錯 Spark 程式碼,瞭解大型資料集快取和不必要的變數廣播。

工作記錄

「批次詳細資料」頁面包含「作業記錄」部分,其中列出從作業 (批次工作負載) 記錄檔篩選出的警告和錯誤。這項功能可快速找出重大問題,不必手動剖析大量記錄檔。您可以從下拉式選單中選取記錄嚴重程度 (例如 Error),並新增文字篩選器來縮小結果範圍。如要進行更深入的分析,請按一下「在記錄檔探索工具中查看」圖示,在記錄檔探索工具中開啟所選批次記錄。

在 Cloud Logging 中查看批次記錄
在 Cloud Logging 中查看批次記錄

範例:在 Google Cloud 控制台的「批次詳細資料」頁面中,從「嚴重程度」選取器選擇 Errors 後,系統會開啟「記錄檔探索工具」

批次記錄檔探索工具。

Spark UI

Spark UI 會從 Serverless for Apache Spark 批次工作負載收集 Apache Spark 執行詳細資料。Spark UI 功能預設為啟用,且不收取任何費用。

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

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

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

  • 資料收集權限:dataproc.batches.sparkApplicationWrite。必須將這項權限授予執行批次工作負載的服務帳戶。這項權限包含在 Dataproc Worker 角色中,系統會自動將該角色授予 Serverless for Apache Spark 預設使用的 Compute Engine 預設服務帳戶 (請參閱「Serverless for Apache Spark 服務帳戶」)。不過,如果您為批次工作負載指定自訂服務帳戶,則必須將 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 UI 頁面。

  1. 前往「Serverless for Apache Spark 互動式工作階段」頁面。

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

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

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

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

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

透過 Gemini Cloud Assist (預先發布版) 進行 AI 輔助調查

總覽

Gemini Cloud Assist Investigations 預先發布功能會運用 Gemini 進階功能,協助建立及執行 Serverless for Apache Spark 批次工作負載。這項功能會分析失敗和執行緩慢的工作負載,找出根本原因並建議修正方式。這項功能會建立持續性分析,方便您查看、儲存及與支援團隊共用,以利協作並加快解決問題。 Google Cloud

功能

使用這項功能,透過 Google Cloud 控制台建立調查:

  • 建立調查前,請先為問題新增自然語言情境說明。
  • 分析失敗和緩慢的批次工作負載。
  • 取得問題根本原因的深入分析資訊,以及建議的修正方式。
  • 建立 Google Cloud 客服案件,並附上完整的調查背景資訊。

事前準備

如要開始使用調查功能,請在 Google Cloud 專案中啟用 Gemini Cloud Assist API

開始進行調查

如要展開調查,請執行下列其中一項操作:

  1. 方法 1:在 Google Cloud 控制台中,前往「批次清單」頁面。如果批次狀態為 Failed,「Gemini 洞察」欄會顯示「調查」按鈕。按一下按鈕即可開始調查。

    批次清單頁面,顯示「調查」按鈕。
  2. 方法 2:開啟批次工作負載的批次詳細資料頁面進行調查。針對 SucceededFailed 批次工作負載,摘要分頁的「健康狀態總覽」部分會顯示「INVESTIGATE」(調查) 按鈕,位於「Insights by Gemini」(Gemini 洞察) 面板中。按一下按鈕即可開始調查。

    批次詳細資料頁面,顯示失敗工作「Insights by Gemini」資料欄中的「調查」按鈕。

    調查按鈕文字會顯示調查狀態:

    • 調查:尚未針對這個 batch_details 執行調查。 按一下按鈕即可開始調查。
    • 查看調查:調查已完成。按一下按鈕即可查看結果。
    • 調查中:正在進行調查。

解讀調查結果

調查完成後,系統會開啟「調查詳細資料」頁面。 這個頁面包含完整的 Gemini 分析結果,並分為下列幾個部分:

  • 問題:這個摺疊部分包含系統自動填入的詳細資料,說明正在調查的批次工作負載。
  • 相關觀察結果:這個部分會列出 Gemini 在分析記錄和指標時發現的重要資料點和異常狀況,並預設為收合狀態。
  • 假設:這是主要部分,預設會展開。 並列出觀察到的問題可能根本原因。每個假設都包含:
    • 總覽:可能原因的說明,例如「高隨機寫入時間和潛在工作偏斜」。
    • 建議修正方式:可採取哪些步驟來解決潛在問題。

採取行動

查看假設和建議後,請按照下列步驟操作:

  • 對工作設定或程式碼套用一或多項建議修正,然後重新執行工作。

  • 按一下面板頂端的「喜歡」或「不喜歡」圖示,提供您對調查結果實用性的意見。

查看並提報調查

如要查看先前執行的調查結果,請在「Cloud Assist Investigations」(Cloud Assist 調查) 頁面點選調查名稱,開啟「Investigation details」(調查詳細資料) 頁面。

如需進一步協助,請開啟 Google Cloud 支援案件。支援工程師可透過這個程序,取得先前調查的完整脈絡,包括 Gemini 生成的觀察結果和假設。這樣一來,您就不必與支援團隊來回溝通,案件解決速度也會更快。

如要從調查建立支援案件,請按照下列步驟操作:

在「調查詳細資料」頁面中,按一下「要求支援」

預覽狀態和價格

在公開預先發布期間,使用 Gemini Cloud Assist 調查功能不會產生任何費用。這項功能正式發布後,就會開始計費。

如要進一步瞭解正式發布後的定價,請參閱 Gemini Cloud Assist 定價

Gemini 搶先體驗版 (將於 2025 年 9 月 22 日停用)

「問問 Gemini」搶先版功能提供一鍵存取功能,可透過「問問 Gemini」按鈕,在 Google Cloud 控制台的「批次」和「批次詳細資料」頁面取得深入分析資訊。這項功能會根據工作負載記錄和指標,產生錯誤、異常狀況和潛在效能提升的摘要。

「問問 Gemini」預先發布版將於 2025 年 9 月 22 日停用,屆時使用者可以繼續使用 Gemini Cloud Assist Investigations 功能,取得 AI 輔助。

重要事項:為確保 AI 輔助功能可持續提供不中斷的疑難排解服務,強烈建議您在 2025 年 9 月 22 日前啟用 Gemini Cloud Assist Investigations

Serverless for Apache Spark 記錄檔

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

查詢 Serverless for Apache Spark 記錄

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

  1. 前往「Logs Explorer」頁面

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

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

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

        1. 在「選取資源」面板中,選取批次「LOCATION」,然後選取「BATCH ID」。這些批次參數會列於 Google Cloud 控制台的 Dataproc「Batches」(批次) 頁面。

        2. 按一下 [套用]

        3. 在「選取記錄名稱」下方,在「搜尋記錄名稱」方塊中輸入 dataproc.googleapis.com,即可限制要查詢的記錄類型。選取一或多個列出的記錄檔名稱。

    • 使用查詢編輯器,篩選出 VM 專屬記錄。

      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」(批次) 頁面上的批次 ID,即可開啟該頁面。

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

  4. 點選「執行查詢」

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

以下列出不同的 Serverless for Apache Spark 記錄類型,並提供每種記錄類型的 Logs Explorer 查詢範例。

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

    輸出記錄的記錄檔探索工具查詢範例:

    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 獨立資源管理員主機的記錄檔,與 Dataproc on Compute Engine YARN ResourceManager 記錄檔類似。
    • worker:Spark 獨立資源管理員工作站的記錄,與 Dataproc on Compute Engine YARN NodeManager 記錄類似。

    以下是 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"
    

    以下是 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 的啟動記錄:
    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 產生的代理程式記錄檔的記錄檔探索工具查詢範例:

    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 命名空間會彙整 Serverless for Apache Spark 自動調整規模記錄。

    指定工作站 VM 產生的代理程式記錄檔的記錄檔探索工具查詢範例:

    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 記錄」。

如要瞭解 Apache Spark 無伺服器稽核記錄,請參閱「Dataproc 稽核記錄」。

工作負載指標

您可以在 Google Cloud 控制台的「Batch details」(批次詳細資料) 頁面,或 Metrics Explorer 中,查看 Apache Spark 無伺服器服務提供的批次和 Spark 指標。

批次指標

Dataproc batch 資源指標可深入瞭解批次資源,例如批次執行器數量。批次指標的前置字串是 dataproc.googleapis.com/batch

Metrics Explorer 中的批次指標範例。

Spark 指標

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

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

Metrics Explorer 中的 Spark 指標範例。

設定指標快訊

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

建立圖表

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

Cloud Monitoring

監控功能會使用工作負載中繼資料和指標,深入瞭解 Serverless for Apache Spark 工作負載的健康狀態和效能。工作負載指標包括 Spark 指標、批次指標和作業指標。

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

建立資訊主頁

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

永久記錄伺服器

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

如要將 PHS 與批次工作負載搭配使用,請按照下列步驟操作:

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

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

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

自動調整

  • 為 Serverless for Apache Spark 啟用自動調校功能:使用 Google Cloud 主控台、gcloud CLI 或 Dataproc API 提交每個週期性 Spark 批次工作負載時,可以為 Serverless for Apache Spark 啟用自動調校功能。

控制台

如要為每個週期性 Spark 批次工作負載啟用自動調整功能,請執行下列步驟:

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

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

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

  3. 在「容器」部分,填寫「同類群組」名稱,用來將批次識別為一系列週期性工作負載之一。Gemini 輔助分析會套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定工作負載每天執行 TPC-H 查詢,您可以將群組名稱指定為 TPCH-Query1

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

gcloud

在本機終端機視窗或 Cloud Shell 中執行下列 gcloud CLI gcloud dataproc batches submit 指令,為每個週期性 Spark 批次工作負載啟用自動調整功能:

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

更改下列內容:

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

API

batches.create 要求中加入 RuntimeConfig.cohort 名稱,即可為每個週期性 Spark 批次工作負載啟用自動調整功能。系統會將自動調整功能套用至以這個同類群組名稱提交的第二個和後續工作負載。舉例來說,如果排定工作負載每天執行 TPC-H 查詢,您可以將同類群組名稱指定為 TPCH-Query1

範例:

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