本文說明可用來監控 Managed Service for Apache Spark 批次工作負載及排解相關問題的工具和檔案。
透過 Google Cloud 控制台排解工作負載問題
如果批次工作失敗或效能不佳,建議您先開啟 「Job details」(工作詳細資料) (「Batch details」(批次詳細資料)) 頁面,方法是在 Google Cloud 控制台「Jobs」(工作) 頁面的 「Serverless Spark」分頁中,按一下批次「Job ID」(工作 ID)。
使用「摘要」分頁:疑難排解中心
開啟批次「Job details」(工作詳細資料) 頁面時,系統預設會選取「Summary」(摘要) 分頁,其中會顯示重要指標和篩選過的記錄,協助您快速初步評估批次健康狀態。完成初步評估後,您可以使用批次「Job details」(工作詳細資料) 頁面提供的更專業工具,進行更深入的分析,例如 Spark UI、Logs Explorer 和 Gemini Cloud Assist。
批次指標重點
批次「Job details」(工作詳細資料) 頁面的「Summary」(摘要) 和「Monitoring」(監控) 分頁包含圖表,顯示重要的批次工作負載指標值。指標圖表會在完成後填入,並以視覺化方式指出潛在問題,例如資源爭用、資料偏斜或記憶體壓力。

下表列出 Google Cloud 控制台批次「Job details」(工作詳細資料) 頁面顯示的 Spark 工作負載指標,並說明如何透過指標值瞭解工作負載狀態和效能。
| 指標 | 顯示內容 |
|---|---|
| 執行程式層級的指標 | |
| JVM GC 時間與執行階段的比率 | 這項指標顯示每個執行器的 JVM GC (垃圾收集) 時間與執行階段時間的比率。如果比率偏高,可能代表特定執行器上執行的工作有記憶體流失問題,或資料結構效率不彰,導致物件流失率偏高。 |
| 溢出至磁碟的位元組數 | 這項指標顯示不同執行器溢出的磁碟位元組總數。如果執行器的磁碟溢出位元組數偏高,可能代表資料偏斜。如果這項指標隨著時間增加,可能表示有階段面臨記憶體壓力或記憶體流失。 |
| 讀取和寫入的位元組數 | 這項指標會顯示每個執行器寫入和讀取的位元組數。如果讀取或寫入的位元組數差異很大,可能表示複製 join 作業導致特定執行器的資料量增加。 |
| 讀取和寫入的記錄 | 這項指標會顯示每個執行程式讀取和寫入的記錄。如果讀取的記錄數量龐大,但寫入的記錄數量偏低,可能表示特定執行器的處理邏輯發生瓶頸,導致記錄在等待時被讀取。如果執行器在讀取和寫入時持續延遲,可能表示這些節點發生資源爭用,或執行器專屬程式碼效率不佳。 |
| 重組寫入時間與執行時間的比率 | 這項指標會顯示執行器在重組執行階段花費的時間,與整體執行階段時間的比較。如果某些執行器的這個值偏高,可能表示資料偏斜或資料序列化效率不彰。 您可以在 Spark UI 中找出隨機寫入時間較長的階段。在這些階段中,找出完成時間超過平均值的異常工作。檢查隨機寫入時間較長的執行器,是否也顯示高磁碟 I/O 活動。提高序列化效率並增加分區步驟,可能有助於解決問題。如果寫入的記錄量遠大於讀取的記錄量,可能代表彙整效率不佳或轉換不正確,導致資料意外重複。 |
| 應用程式層級指標 | |
| 階段進度 | 這項指標會顯示失敗、等待中和執行中階段的數量。如果失敗或等待中的階段數量過多,可能表示資料偏斜。檢查資料分區,並使用 Spark UI 的「Stages」(階段) 分頁,對階段失敗的原因進行偵錯。 |
| 批次 Spark 執行器 | 這項指標會顯示可能需要的執行器數量,以及執行中的執行器數量。如果所需執行器與執行中的執行器數量有很大差異,可能表示自動調度資源功能有問題。 |
| VM 層級的指標 | |
| 已使用的記憶體 | 這項指標會顯示 VM 記憶體的使用百分比。如果主要節點百分比偏高,可能表示驅動程式面臨記憶體壓力。如果是其他 VM 節點,百分比偏高可能代表執行器記憶體不足,導致磁碟溢出率偏高,工作負載執行時間也較長。使用 Spark UI 分析執行器,檢查 GC 時間是否過長,以及工作失敗率是否偏高。此外,您也需要對 Spark 程式碼進行偵錯,找出大型資料集快取和不必要的變數廣播。 |
工作記錄
批次「Job details」(工作詳細資料) 頁面包含「Job logs」(工作記錄) 分頁 (和記錄重點),其中列出從工作 (批次工作負載) 記錄篩選出的警告和錯誤。這項功能可快速找出重大問題,不必手動剖析大量記錄檔。您可以從下拉式選單中選取記錄「嚴重性」(例如 Error),並新增文字「篩選器」來縮小結果範圍。如要進行更深入的分析,請按一下「View in Logs Explorer」(在記錄檔探索工具中查看) 圖示,在記錄檔探索工具中開啟所選批次記錄。
範例:在 Google Cloud 控制台的批次「Job details」(工作詳細資料) 頁面中,從「Severity」(嚴重性) 選取器中選擇「Errors」後,系統會開啟「Logs Explorer」。

Spark UI
Spark UI 會從 Managed Service for Apache Spark 批次工作負載收集 Apache Spark 執行詳細資料。Spark UI 功能預設為啟用,不收取任何費用。
Spark UI 功能收集的資料會保留 90 天。您可以使用這個網頁介面監控及偵錯 Spark 工作負載,不必建立永久記錄伺服器。
必要的 Identity and Access Management 權限和角色
必須具備下列權限,才能搭配批次工作負載使用 Spark UI 功能。
資料收集權限:
dataproc.batches.sparkApplicationWrite。這項權限必須授予執行批次工作負載的服務帳戶。Managed Service for Apache Spark Worker角色包含這項權限,並會自動授予 Managed Service for Apache Spark 預設使用的 Compute Engine 預設服務帳戶 (請參閱「Managed Service for Apache Spark 服務帳戶」)。不過,如果您為批次工作負載指定自訂服務帳戶,則必須將dataproc.batches.sparkApplicationWrite權限新增至該服務帳戶 (通常是將 Managed Service for Apache SparkWorker角色授予服務帳戶)。Spark UI 存取權限:
dataproc.batches.sparkApplicationRead。使用者必須具備這項權限,才能在Google Cloud 控制台存取 Spark UI。Dataproc Viewer、Dataproc Editor和Dataproc Administrator角色都具備這項權限。如要在 Google Cloud 控制台開啟 Spark UI,您必須具備下列其中一個角色,或具備包含這項權限的自訂角色。
開啟 Spark UI
您可以在 Google Cloud 控制台批次工作負載中,找到 Spark UI 頁面。
在 Google Cloud 控制台中,前往 Managed Service for Apache Spark 的「Jobs」(工作) 頁面。
選取「Serverless Spark」分頁標籤,然後點選批次「工作 ID」,開啟「Job details」(工作詳細資料) 頁面。
按一下「Spark 應用程式 ID」旁的「在 Spark UI 中查看」,或「查看 Spark UI」。
在下列情況下,「View in Spark UI」(在 Spark UI 中查看) 連結會停用:
- 未授予必要權限
- 如果批次「Job details」(工作詳細資料) 頁面未啟用 Spark UI
- 提交批次工作負載時,如果將
spark.dataproc.appContext.enabled屬性設為false
Managed Service for Apache Spark 記錄
Managed Service for Apache Spark 預設會啟用記錄功能,且工作負載記錄會在工作負載完成後保留。Managed Service for Apache Spark 會在 Cloud Logging 收集工作負載記錄。您可以在記錄檔探索工具的 Cloud Dataproc Batch 資源下,存取 Managed Service for Apache Spark 記錄。
查詢 Managed Service for Apache Spark 記錄
Google Cloud 控制台中的 Logs Explorer 提供查詢窗格,可協助您建構查詢,檢查批次工作負載記錄。如要建立查詢來檢查 Batch 工作負載記錄,請按照下列步驟操作:
- 系統會選取目前的專案。您可以按一下「Refine scope Project」(縮小範圍專案),選取其他專案。
定義批次記錄查詢。
使用篩選器選單篩選批次工作負載。
在「所有資源」下方,選取「Cloud Managed Service for Apache Spark 批次」資源。
在「Select resource」(選取資源) 面板中,依序選取批次「LOCATION」(位置) 和「BATCH ID」(批次 ID)。這些批次參數會列在 Google Cloud 控制台的 Managed Service for Apache Spark 「Jobs」(工作) 頁面的「 Serverless Spark」分頁中。
按一下「套用」。
在「Select log names」(選取記錄檔名稱) 下方,在「Search log names」(搜尋記錄檔名稱) 方塊中輸入
dataproc.googleapis.com,限制要查詢的記錄類型。選取一或多個列出的記錄檔名稱。
使用查詢編輯器篩選 VM 專屬記錄。
指定資源類型和 VM 資源名稱,如以下範例所示:
注意:resource.type="cloud_dataproc_batch" labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
- VM_NAME_PREFIX:如果是執行於 Managed Service for Apache Spark
3.0以上執行階段版本的批次工作負載,請使用gdpic-rm;如果是執行於舊版執行階段的批次工作負載,請使用gdpic-srvls-batch。 - BATCH_UUID:在 Google Cloud 控制台的「Jobs」(工作) 頁面中,按一下「Serverless Spark」分頁上的批次「Job ID」(工作 ID),即可開啟批次「Job details」(工作詳細資料) (「Batch details」(批次詳細資料)) 頁面,其中會列出批次「Job UUID」(工作 UUID)。
批次記錄也會在 VM 資源名稱中列出批次 UUID。以下是批次 driver.log 的範例:
- VM_NAME_PREFIX:如果是執行於 Managed Service for Apache Spark
點選「執行查詢」。
Managed Service for Apache Spark 記錄類型和查詢範例
下表列出不同的 Managed Service for Apache Spark 記錄類型,並提供各類型的 Logs Explorer 查詢範例。
dataproc.googleapis.com/output:這個記錄檔包含批次工作負載輸出內容。Managed Service for Apache 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"
dataproc.googleapis.com/spark:spark命名空間會彙整 Spark 記錄,記錄在 Managed Service for Apache Spark 叢集主要執行個體和 worker VM 上執行的 daemon 和執行器。每個記錄項目都包含master、worker或executor元件標籤,用於識別記錄來源,如下所示:executor:使用者程式碼執行工具的記錄。通常是分散式記錄。master:Spark 獨立資源管理工具主節點的記錄,類似於 Managed Service for Apache Spark YARNResourceManager記錄。worker:Spark 獨立資源管理工具 worker 的記錄,類似於 Managed Service for Apache Spark YARNNodeManager記錄。
Logs Explorer 查詢範例,用於查詢
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"
dataproc.googleapis.com/startup:startup命名空間包含批次 (叢集) 啟動記錄。包括所有初始化指令碼記錄。元件會以標籤識別,例如: 記錄檔探索工具查詢範例,用於查詢指定 VM 的啟動記錄:startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
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"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
dataproc.googleapis.com/agent:agent命名空間會匯總 Managed Service for Apache Spark 代理記錄。每個記錄項目都包含檔案名稱標籤,用於識別記錄來源。Logs Explorer 查詢範例,用於查詢指定 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%2Fagent" labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
dataproc.googleapis.com/autoscaler:autoscaler命名空間會匯總 Managed Service for Apache 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%2Fautoscaler" labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
詳情請參閱「Managed Service for Apache Spark 記錄」。
如要瞭解 Managed Service for Apache Spark 稽核記錄,請參閱「Managed Service for Apache Spark 稽核記錄」。
工作負載指標
Managed Service for Apache Spark 提供批次和 Spark 指標,您可以在 Google Cloud 控制台的「Metrics Explorer」或批次「Job details」(工作詳細資料) 頁面查看。
批次指標
Managed Service for Apache Spark batch 資源指標可讓您深入瞭解批次資源,例如批次執行器數量。批次指標的前置字串為 dataproc.googleapis.com/batch。

Spark 指標
根據預設,Managed Service for Apache Spark 會啟用可用的 Spark 指標收集功能,除非您使用 Spark 指標收集屬性停用或覆寫一或多個 Spark 指標的收集功能。
可用的 Spark 指標包括 Spark 驅動程式和執行器指標,以及系統指標。可用的 Spark 指標會以前置字串 custom.googleapis.com/ 開頭。

設定指標警告
您可以建立 Managed Service for Apache Spark 指標警告,接收工作負載問題通知。
建立圖表
您可以使用Google Cloud 控制台中的Metrics Explorer,建立圖表來以視覺化方式呈現工作負載指標。例如,您可以建立圖表來顯示 disk:bytes_used,然後依 batch_id 篩選。
Cloud Monitoring
Monitoring 會使用工作負載中繼資料和指標,提供 Managed Service for Apache Spark 工作負載健康狀態和效能的深入分析。工作負載指標包括 Spark 指標、批次指標和作業指標。
您可以在 Google Cloud 控制台使用 Cloud Monitoring 探索指標、新增圖表、建立資訊主頁和快訊。
建立資訊主頁
您可以建立資訊主頁,使用多項專案和不同 Google Cloud 產品的指標監控工作負載。詳情請參閱「建立及管理自訂資訊主頁」。
永久記錄伺服器
Managed Service for Apache Spark 會建立執行工作負載所需的運算資源、在這些資源上執行工作負載,並在工作負載完成時刪除資源。工作負載完成後,工作負載指標和事件不會保留。不過,您可以使用永久記錄伺服器 (PHS),將工作負載應用程式記錄 (事件記錄) 保留在 Cloud Storage。
如要搭配批次工作負載使用 PHS,請按照下列步驟操作:
自動調整
- 啟用 Managed Service for Apache Spark 的自動調整功能:使用 Google Cloud 控制台、gcloud CLI 或 Managed Service for Apache Spark API 提交每個週期性 Spark 批次工作負載時,可以啟用 Managed Service for Apache Spark 的自動調整功能。
控制台
請按照下列步驟,為各項週期性 Spark 批次工作負載啟用自動調整功能:
在 Google Cloud 控制台中,前往 Managed Service for Apache Spark 的「Jobs」(工作) 頁面。
如要建立批次工作負載,請按一下「Submit job」(提交工作),開啟「Submit a job」(提交工作) 頁面。
在「Select compute type for job」(選取工作的運算類型) 下方,確認已選取「Serverless Spark」(無伺服器 Spark)。
在「Serverless job details」(無伺服器工作詳細資料) 部分:
- 指定工作 ID,或接受預設 ID。
- 選取「Runtime profile」(執行階段設定檔) (或保留區域的「Default service configuration」(預設服務設定)),然後按一下「Summary」(摘要) 卡片中的「Configure」(設定) (或按一下「Runtime profile」(執行階段設定檔) 選單中的「Create new profile」(建立新的設定檔)),開啟執行階段設定檔設定面板。
- 在執行階段設定檔設定面板中,展開「Additional configuration」(其他設定),然後按一下「Other customizations」(其他自訂項目) 旁的「Edit」(編輯)。
- 在「Other customizations」(其他自訂項目) 面板的「Autotuning」(自動調整) 下方,按一下「Enable」(啟用) 切換鈕,然後填入「Cohort ID」(同類群組 ID),將批次識別為一系列週期性工作負載之一。Gemini 輔助分析會套用至使用這個群組 ID 提交的第二個及後續工作負載。舉例來說,如果排定的工作負載每天執行 TPC-H 查詢,請將同類群組 ID 指定為
tpch-query1。 - 在「Other customizations」(其他自訂項目) 面板中,按一下「Save」(儲存),然後在執行階段設定檔設定面板中,按一下「Use configuration」(使用設定) (或「Save new profile」(儲存新設定檔))。
視需要填寫「Submit a job」(提交工作) 頁面中的「Files and artifacts」(檔案和構件) 和「Job execution and properties」(工作執行和屬性) 區段,然後按一下「Submit」(提交)。詳情請參閱「提交批次工作負載」。
gcloud
在本機終端機視窗或 Cloud Shell 執行下列 gcloud CLI gcloud dataproc batches submit 指令,為每個週期性 Spark 批次工作負載啟用自動調整功能:
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ other arguments ...
更改下列內容:
- COMMAND:Spark 工作負載類型,例如
Spark、PySpark、Spark-Sql或Spark-R。 - REGION:工作負載執行的區域。
- COHORT:同類群組名稱,用於將批次識別為一系列週期性工作負載之一。Gemini 輔助分析會套用至以這個同類群組名稱提交的第二個及後續工作負載。舉例來說,如果排定的工作負載每天執行 TPC-H 查詢,請將同類群組名稱指定為
TPCH Query 1。
API
在 batches.create 要求中加入 RuntimeConfig.cohort 名稱,即可為每個週期性 Spark 批次工作負載啟用自動調整功能。自動調整功能會套用至使用這個群組名稱提交的第二個及後續工作負載。舉例來說,如果排定的工作負載每天執行 TPC-H 查詢,請將同類群組名稱指定為 TPCH-Query1。
範例:
...
runtimeConfig:
cohort: TPCH-Query1
...