使用作業重試政策 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用作業重試政策

在 Amazon 6.9.0 版及更新EKS版本EMR中,您可以設定任務執行的重試政策。重試政策會導致作業驅動程式 Pod 在失敗或遭到刪除時自動重新啟動。這讓長時間執行的 Spark 串流作業對故障更具彈性。

設定作業的重試政策

若要設定重試政策,您可以使用 StartJobRun 提供RetryPolicyConfiguration欄位API。retryPolicyConfiguration 範例如下所示:

aws emr-containers start-job-run \ --virtual-cluster-id cluster_id \ --name sample-job-name \ --execution-role-arn execution-role-arn \ --release-label emr-6.9.0-latest \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py", "entryPointArguments": [ "2" ], "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }' \ --retry-policy-configuration '{ "maxAttempts": 5 }' \ --configuration-overrides '{ "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group_name", "logStreamNamePrefix": "my_log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket" } } }'
注意

retryPolicyConfiguration 僅適用於 AWS CLI 1.27.68 之後的版本。若要將 更新 AWS CLI 至最新版本,請參閱安裝或更新最新版本的 AWS CLI

maxAttempts 欄位設定為您希望作業驅動程式 Pod 在失敗或遭到刪除時重新啟動的次數上限。兩次作業驅動程式重試嘗試之間的執行間隔為指數重試間隔 (10 秒、20 秒、40 秒...),上限為 6 分鐘,如 Kubernetes 文件所述。

注意

每個額外的任務驅動程序執行都會作為另一個任務執行計費,並受 Amazon EMR EKS定價 約束。

重試政策組態值

  • 作業的預設重試政策:根據預設,StartJobRun 包含設定為最多 1 次的重試政策。可以視需要設定重試政策。

    注意

    如果 retryPolicyConfigurationmaxAttempts 設定為 1,則表示在失敗時不會進行重試來啟動驅動程式 Pod。

  • 停用任務的重試政策:若要停用重試政策,請將 中的嘗試次數上限值設定為 retryPolicyConfiguration 1。

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • maxAttempts 為有效範圍內的任務設定:如果maxAttempts值超出有效範圍,StartJobRun呼叫將會失敗。有效 maxAttempts 範圍介於 1 到 2,147,483,647 (32 位元整數) 之間,這是 Kubernetes 的 backOffLimit 組態設定所支援的範圍。如需詳細資訊,請參閱 Kubernetes 文件的 Pod 退避失敗政策。如果 maxAttempts 值無效,則會傳回下列錯誤訊息:

    { "message": "Retry policy configuration's parameter value of maxAttempts is invalid" }

擷取作業的重試政策狀態

您可以使用 ListJobRuns和 檢視任務的重試嘗試狀態DescribeJobRunAPIs。一旦請求具有已啟用重試政策組態的作業,ListJobRunDescribeJobRun 回應就會在 RetryPolicyExecution 欄位中包含重試政策的狀態。此外,DescribeJobRun 回應將包含在作業的 StartJobRun 請求中輸入的 RetryPolicyConfiguration

回應範例

ListJobRuns response
{ "jobRuns": [ ... ... "retryPolicyExecution" : { "currentAttemptCount": 2 } ... ... ] }
DescribeJobRun response
{ ... ... "retryPolicyConfiguration": { "maxAttempts": 5 }, "retryPolicyExecution" : { "currentAttemptCount": 2 }, ... ... }

在作業中停用重試政策後,將不會顯示這些欄位,如下面的 重試政策組態值 中所述。

使用重試政策監控作業

當您啟用重試政策時,會為每個建立的任務驅動程式產生 CloudWatch 事件。若要訂閱這些事件,請使用下列命令設定 CloudWatch 事件規則:

aws events put-rule \ --name cwe-test \ --event-pattern '{"detail-type": ["EMR Job Run New Driver Attempt"]}'

此事件將傳回作業驅動程式的 newDriverPodNamenewDriverCreatedAt 時間戳記、previousDriverFailureMessagecurrentAttemptCount 的相關資訊。如果停用重試政策,將不會建立這些事件。

如需如何使用 CloudWatch 事件監控任務的詳細資訊,請參閱 使用 Amazon CloudWatch Events 監控任務

尋找驅動程式和執行程式的日誌

驅動程式 Pod 名稱遵循 spark-<job id>-driver-<random-suffix> 格式。相同的 random-suffix 會新增至驅動程式產生的執行程式 Pod 名稱。使用此 random-suffix 時,可尋找驅動程式及其關聯執行程式的日誌。只有在為作業啟用重試政策時,才會顯示 random-suffix;否則,random-suffix 就不存在。

如需有關如何使用日誌的監控組態來設定作業的詳細資訊,請參閱 執行 Spark 應用程式