可重新啟動的工作

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

重新啟動工作可減輕一些常見的工作失敗類型所造成的問題,包括記憶體不足問題和非預期的 Compute Engine 虛擬機器重新啟動。可重新啟動的工作特別適合用於長時間執行的工作和串流工作。舉例來說,您可以重新啟動在 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 控制台不提供「最多重新啟動次數」設定。