根據預設,Dataproc 工作失敗時不會自動重新啟動;但可透過選用設定,將工作設為失敗時重新啟動。將工作設為重新啟動時,請指定每小時的重試次數上限 (上限為每小時重試 10 次) 或重試總次數上限 (上限為總共重試 240 次),或同時指定這兩項。
重新啟動工作可減輕一些常見的工作失敗類型所造成的問題,包括記憶體不足問題和非預期的 Compute Engine 虛擬機器重新啟動。可重新啟動的工作尤其適合用於長時間執行和串流的工作。例如,您可以重新啟動在 Cloud Dataproc 叢集上執行的 Spark 串流工作,確保串流工作的復原力。
可重新啟動的工作元件資訊
下列工作元件資訊適用於回報工作成功或失敗:
- 如果驅動程式以
0代碼終止,則會回報工作成功。 - 如果發生下列情況,則會回報工作失敗:
- 驅動程式在 10 分鐘內以非 0 代碼終止超過 4 次。
- 驅動程式以非 0 代碼終止,且超過
max_failures_per_hour或max_failures_total設定範圍。
- 如果驅動程式以非 0 代碼結束、未發生輾轉現象,且在
max_failures_per_hour和max_failures_total設定範圍內,則工作將重新啟動。
工作設計注意事項
- 工作應設計為能夠妥善處理重新啟動的情況。例如,若工作寫入某目錄,則須考量重新啟動時,該目錄已存在的可能性。
- 使用查核點機制的 Apache Spark 串流工作可以在失敗後重新啟動,但這些工作不會回報 Yarn 狀態。
建立並使用可重新啟動的工作
透過 gcloud CLI gcloud 指令列工具、Dataproc REST API 或Google 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.JobScheduling 的 maxFailuresPerHour 和/或 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 控制台不支援重新啟動總次數上限的設定功能。