可重新啟動的工作

根據預設,Dataproc 工作失敗時不會自動重新啟動;但可透過選用設定,將工作設為失敗時重新啟動。將工作設為重新啟動時,請指定每小時的重試次數上限 (上限為每小時重試 10 次) 或重試總次數上限 (上限為總共重試 240 次),或同時指定這兩項。

重新啟動工作可減輕一些常見的工作失敗類型所造成的問題,包括記憶體不足問題和非預期的 Compute Engine 虛擬機器重新啟動。可重新啟動的工作尤其適合用於長時間執行和串流的工作。例如,您可以重新啟動在 Cloud Dataproc 叢集上執行的 Spark 串流工作,確保串流工作的復原力。

可重新啟動的工作元件資訊

下列工作元件資訊適用於回報工作成功或失敗:

  • 如果驅動程式以 0 代碼終止,則會回報工作成功
  • 如果發生下列情況,則會回報工作失敗
    • 驅動程式在 10 分鐘內以非 0 代碼終止超過 4 次。
    • 驅動程式以非 0 代碼終止,且超過 max_failures_per_hourmax_failures_total 設定範圍。
  • 如果驅動程式以非 0 代碼結束、未發生輾轉現象,且在 max_failures_per_hourmax_failures_total 設定範圍內,則工作將重新啟動

工作設計注意事項

  • 工作應設計為能夠妥善處理重新啟動的情況。例如,若工作寫入某目錄,則須考量重新啟動時,該目錄已存在的可能性。
  • 使用查核點機制的 Apache Spark 串流工作可以在失敗後重新啟動,但這些工作不會回報 Yarn 狀態。

建立並使用可重新啟動的工作

透過 gcloud CLI gcloud 指令列工具、Dataproc REST APIGoogle Cloud console提交工作時,可以指定工作每小時可重新啟動次數及重試次數的上限。

範例:如要允許工作重試上限為 10 次,但每小時不得超過 5 次,請將 max-failures-total 設為 10,並將 max-failures-per-hour 設為 5。

gcloud

使用 --max-failures-per-hour--max-failures-total 旗標,可分別指定工作每小時可重新啟動次數上限 (上限為每小時重試 10 次) 或重試總次數上限 (上限為總共重試 240 次),或同時指定兩者。

gcloud dataproc jobs submit job type \
    --region=region \
    --max-failures-per-hour=number \
    --max-failures-total=number \
    ... other args

REST API

如要指定工作每小時可重新啟動的次數上限 (上限為每小時重試 10 次) 或重試總次數上限 (上限是重試總次數 240 次),或同時指定兩者,請分別設定 Job.JobSchedulingmaxFailuresPerHour 和/或 maxFailuresTotal 欄位。

範例

POST /v1/projects/project-id/regions/us-central1/jobs:submit/
{
"projectId": "project-id",
"job": {
"placement": {
  "clusterName": "example-cluster"
},
"reference": {
  "jobId": "cea7ae0b...."
},
"sparkJob": {
  "args": [
    "1000"
  ],
  "mainClass": "org.apache.spark.examples.SparkPi",
  "jarFileUris": [
    "file:///usr/lib/spark/examples/jars/spark-examples.jar"
  ]
},
"scheduling": {
  "maxFailuresPerHour": 5
  "maxFailuresTotal": 10
}
}
}

控制台

您可以在 Dataproc 的「Submit a job」(提交工作) 頁面指定「max restarts per hour」(每小時重新啟動次數上限) 來提交可重新啟動的工作 (上限值是每小時 10 次)。 Google Cloud 控制台不支援重新啟動總次數上限的設定功能。