根據預設,Dataproc 工作不會在失敗時自動重新啟動。 您可以使用選用設定,將工作設為失敗時重新啟動。將工作設為重新啟動時,請指定每小時的重試次數上限 (上限為每小時重試 10 次) 或總重試次數上限 (上限為總共重試 240 次),或同時指定兩者。
重新啟動工作可減輕一些常見的工作失敗類型所造成的問題,包括記憶體不足問題和非預期的 Compute Engine 虛擬機器重新啟動。可重新啟動的工作特別適合用於長時間執行的工作和串流工作。舉例來說,您可以重新啟動在 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 控制台不提供「最多重新啟動次數」設定。