根據預設,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 控制台不提供「最多重新啟動次數」設定。