排解 Dataproc 工作問題

本頁提供相關資訊,協助您監控及偵錯 Dataproc 工作,並瞭解 Dataproc 工作錯誤訊息。

工作監控和偵錯

使用 Google Cloud CLI、Dataproc REST API 和 Google Cloud 控制台 來分析及偵錯 Dataproc 工作。

gcloud CLI

若要檢查執行中工作的狀態:

gcloud dataproc jobs describe job-id \
    --region=region

如要查看工作驅動程式輸出,請參閱「查看工作輸出內容」。

REST API

呼叫 jobs.get 來檢查工作的 JobStatus.StateJobStatus.SubstateJobStatus.details,以及 YarnApplication 欄位。

控制台

如要查看工作驅動程式輸出,請參閱「查看工作輸出內容」。

如要查看 Logging 中的 Dataproc 代理程式記錄,請從記錄檔探索工具叢集選取器中,依序選取「Dataproc Cluster」(Dataproc 叢集)→「Cluster Name」(叢集名稱)→「Cluster UUID」(叢集 UUID)

然後使用記錄選取器選取 google.dataproc.agent 記錄。

在 Logging 中查看工作記錄

如果工作失敗,您可以在 Logging 中存取工作記錄

判斷提交工作的使用者

您只要查詢工作的詳細資料,系統就會在 submittedBy 欄位中顯示提交該工作的使用者。舉例來說,下方的工作輸出顯示,將範例工作提交到叢集的是 user@domain

...
placement:
  clusterName: cluster-name
  clusterUuid: cluster-uuid
reference:
  jobId: job-uuid
  projectId: project
status:
  state: DONE
  stateStartTime: '2018-11-01T00:53:37.599Z'
statusHistory:
- state: PENDING
  stateStartTime: '2018-11-01T00:33:41.387Z'
- state: SETUP_DONE
  stateStartTime: '2018-11-01T00:33:41.765Z'
- details: Agent reported job success
  state: RUNNING
  stateStartTime: '2018-11-01T00:33:42.146Z'
submittedBy: user@domain

錯誤訊息

未取得工作

這表示主要節點上的 Dataproc 代理程式無法從控制層取得工作。這通常是由於記憶體不足 (OOM) 或網路問題所致。 如果先前作業執行成功,且您未變更網路設定,最可能的原因就是 OOM,通常是因為同時提交多項作業,或作業的驅動程式耗用大量記憶體 (例如將大型資料集載入記憶體的作業)。

找不到任何在主要節點上處於啟用狀態的代理程式

這表示主要節點上的 Dataproc 代理程式未處於活動狀態,無法接受新工作。這通常是因為記憶體不足 (OOM)、網路問題,或是主節點 VM 狀況不佳。如果先前工作執行成功,且您未變更網路設定,則最可能的原因是記憶體不足 (OOM),這通常是因為同時提交多項工作,或工作驅動程式耗用大量記憶體 (將大型資料集載入記憶體的工作)。

如要解決問題,請嘗試下列做法:

找不到工作

這個錯誤表示叢集在工作執行期間遭到刪除。您可以執行下列動作,找出執行刪除作業的主體,並確認叢集是在作業執行期間刪除:

  • 查看 Dataproc 稽核記錄,找出執行刪除作業的主體。

  • 使用 Logging 或 gcloud CLI 檢查 YARN 應用程式的最後已知狀態是否為 RUNNING

    • 在 Logging 中使用下列篩選器:
    resource.type="cloud_dataproc_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.cluster_uuid="CLUSTER_UUID"
    "YARN_APPLICATION_ID State change from"
    
    • 執行 gcloud dataproc jobs describe job-id --region=REGION,然後檢查輸出內容中的 yarnApplications: > STATE
  • 如果刪除叢主體的帳戶是 Dataproc 服務代理程式服務帳戶,請檢查叢集是否設定了自動刪除時間長度,且該長度短於工作時間長度。

為避免發生 Task not found 錯誤,請使用自動化功能,確保叢集不會在所有執行中的工作完成前遭到刪除。

裝置沒有足夠的空間

Dataproc 會將 HDFS 和暫存資料寫入磁碟。這則錯誤訊息表示叢集建立時的磁碟空間不足。如要分析及避免發生這項錯誤,請按照下列步驟操作:

  • 在 Google Cloud 控制台的「Cluster details」(叢集詳細資料) 頁面中,查看「Configuration」(設定) 分頁下方列出的叢集主要磁碟大小。建議使用 n1-standard-4 機器類型的叢集,磁碟大小至少為 1000 GB;使用 n1-standard-32 機器類型的叢集,磁碟大小至少為 2 TB

  • 如果叢集磁碟大小小於建議大小,請重新建立叢集,並將磁碟大小設為至少建議大小。

  • 如果磁碟大小等於或大於建議大小,請使用 SSH 連線至叢集主 VM,然後在主 VM 上執行 df -h,檢查磁碟使用率,判斷是否需要額外磁碟空間。

  • 收集及檢查磁碟指標