本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EMR無伺服器 Job 恢復
EMR無伺服器版本 7.1.0 及更高版本包含工作恢復能力的支援,因此它會自動重試任何失敗的工作,無需您手動輸入。工作備援的另一個好處是,如果 AZ 遇到任何問題,EMR無伺服器會將工作執行移至不同的可用區域 (AZ)。
若要啟用作業的工作復原,請設定工作的重試原則。重試原則可確保EMR無伺服器會在任何時候失敗時自動重新啟動工作。批次和串流工作都支援重試原則,因此您可以根據使用案例自訂工作恢復能力。下表比較批次和串流作業之間的工作恢復能力的行為和差異。
批次任務 | 串流工作 | |
---|---|---|
預設行為 | 不會重新執行工作。 | 當應用程式在執行工作時建立檢查點時,一律重試執行工作。 |
重試點 | Batch 工作沒有檢查點,因此EMR無伺服器一律會從頭開始重新執行工作。 | 串流任務支援檢查點,因此您可以設定串流查詢以儲存執行時期狀態,並進度至 Amazon S3 中的檢查點位置。EMR無伺服器會繼續從檢查點執行的工作。如需詳細資訊,請參閱 Apache Spark 文件中的使用檢查點從失敗中復原 |
重試嘗試次數上限 | 允許最多 10 次重試。 | 串流工作具有內建的鞭打防止控制功能,因此如果工作在一小時後繼續失敗,應用程式就會停止重試工作。一小時內的預設重試次數為五次。您可以將這個重試次數設定為介於 1 或 10 之間。您無法自訂最多嘗試次數。值 1 表示不重試。 |
當EMR無伺服器嘗試重新執行工作時,它也會使用嘗試編號為工作索引,以便您可以在各次嘗試中追蹤工作的生命週期。
您可以使用EMR無伺服器API作業或 AWS CLI 以變更工作恢復能力或查看與工作恢復能力相關的資訊。如需詳細資訊,請參閱EMR無伺服器API指南。
根據預設,EMR無伺服器不會重新執行批次工作。若要啟用批次工作的重試,請在開始批次工作執行時設定maxAttempts
參數。此maxAttempts
參數僅適用於批次工作。預設值為 1,表示不要重新執行工作。接受的值為 1 到 10 (含)。
下列範例示範如何在開始工作執行時指定最多 10 次嘗試次數。
aws emr-serverless start-job-run --application-id
<APPLICATION_ID>
\ --execution-role-arn<JOB_EXECUTION_ROLE>
\ --mode 'BATCH' \ --retry-policy '{ "maxAttempts": 10 }' \ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples-does-not-exist.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }'
EMR如果串流作業失敗,無伺服器會無限期地重試。若要防止因為重複無法復原的失敗而造成衝擊,請使用配置串流工作重試的防止衝擊控制。maxFailedAttemptsPerHour
此參數可讓您指定EMR無伺服器停止重試前一小時內允許的失敗嘗試次數上限。預設值為 5。接受的值為 1 到 10 (含)。
aws emr-serverless start-job-run --application-id
<APPPLICATION_ID>
\ --execution-role-arn<JOB_EXECUTION_ROLE>
\ --mode 'STREAMING' \ --retry-policy '{ "maxFailedAttemptsPerHour": 7 }' \ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples-does-not-exist.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }'
您也可以使用其他作API業執行作業取得有關作業的資訊。例如,您可以將attempt
參數與作業搭配使用,以取得有關特定工GetJobRun
作嘗試的詳細資訊。如果未包含attempt
參數,作業會傳回有關最新嘗試的資訊。
aws emr-serverless get-job-run \ --job-run-id
job-run-id
\ --application-idapplication-id
\ --attempt 1
此ListJobRunAttempts
作業會傳回與工作執行相關之所有嘗試的相關資訊。
aws emr-serverless list-job-run-attempts \ --application-id
application-id
\ --job-run-idjob-run-id
此GetDashboardForJobRun
作業會建立並傳回URL可用來存取工作執行UIs的應用程式。該attempt
參數可以讓你得到一URL個特定的嘗試。如果未包含attempt
參數,作業會傳回有關最新嘗試的資訊。
aws emr-serverless get-dashboard-for-job-run \ --application-id
application-id
\ --job-run-idjob-run-id
\ --attempt 1
使用重試政策監控作業
Job 備援支援也會新增EMR無伺服器工作執行重試的新事件。EMR無伺服器會在每次重試工作時發佈此事件。您可以使用此通知來追蹤工作的重試次數。如需有關事件的詳細資訊,請參閱 Amazon EventBridge 事件。
使用重試原則記錄
每次EMR無伺服器重試工作時,嘗試都會產生自己的記錄集。為確保EMR無伺服器可以成功地將這些日誌交付到 Amazon S3 和 Amazon, CloudWatch 而不會覆寫任何日誌,EMR無伺服器會在 S3 日誌路徑和日 CloudWatch 誌串流名稱的格式中新增前綴,以包含任務的嘗試編號。
以下是格式外觀的範例。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'.
此格式可確保EMR無伺服器會將每次任務嘗試的所有日誌發佈到 Amazon S3 和 CloudWatch中的指定位置。如需詳細資訊,請參閱儲存記錄檔。
注意
EMR無伺服器只會在所有串流工作和任何已啟用重試的批次工作中使用此前置字元格式。