本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用作业重试策略
在 Amazon EMR on EKS 6.9.0 版本及更高版本中,您可以为作业运行设置重试策略。重试策略会在作业驱动程序容器组(pod)失败或被删除时自动重新启动。这使得长时间运行的 Spark 流式传输作业在出现故障时更具弹性。
设置任务的重试策略
要配置重试策略,您需要使用 StartJobRunAPI 提供一个RetryPolicyConfiguration字段。此处显示了一个示例 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 on EKS 定价
重试策略配置值
-
作业的默认重试策略:
StartJobRun包括默认情况下最大尝试次数设置为 1 的重试策略。您可以根据需要配置重试策略。注意
如果
retryPolicyConfiguration的maxAttempts设置为 1,则表示在失败时不会重试启动驱动程序容器组(pod)。 -
禁用任务的重试策略:要禁用重试策略,请将中的最大尝试次数值设置 retryPolicyConfiguration 为 1。
"retryPolicyConfiguration": { "maxAttempts": 1 } -
在有效范围内为作业设置 maxAttempts:如果
maxAttempts值超出有效范围,则StartJobRun调用将失败。有效maxAttempts范围介于 1 到 2147483647(32 位整数)之间,该范围受 Kubernetes 的backOffLimit配置设置支持。有关更多信息,请参阅 Kubernetes 文档中的 容器组(pod)回退失败策略。如果该 maxAttempts值无效,则系统会返回以下错误消息:{ "message": "Retry policy configuration's parameter value of maxAttempts is invalid" }
检索任务重试策略的状态
您可以使用和查看任务的重试状态ListJobRuns。DescribeJobRun APIs请求启用了重试策略配置的任务后,ListJobRun 和 DescribeJobRun 响应将在 RetryPolicyExecution 字段中包含重试策略的状态。此外,DescribeJobRun 响应将包含在任务的 StartJobRun 请求中输入的 RetryPolicyConfiguration。
示例响应
在禁用作业中的重试策略后,这些字段将不可见,如以下 重试策略配置值 中所述。
使用重试策略监控作业
启用重试策略后,会为创建的每个任务驱动程序生成一个 CloudWatch 事件。要订阅这些事件,请使用以下命令设置 CloudWatch 事件规则:
aws events put-rule \ --name cwe-test \ --event-pattern '{"detail-type": ["EMR Job Run New Driver Attempt"]}'
该事件将返回有关作业驱动程序的 newDriverPodName、newDriverCreatedAt 时间戳、previousDriverFailureMessage 和 currentAttemptCount 的信息。如果禁用重试策略,则不会创建这些事件。
有关如何通过 CloudWatch 事件监控作业的更多信息,请参阅通过 Amazon Events CloudWatch 监控作业。
查找驱动程序和执行程序的日志
驱动程序 Pod 名称遵循格式 spark-<job
id>-driver-<random-suffix>。相同的 random-suffix 会添加到驱动程序生成的执行程序 Pod 名称中。使用此 random-suffix 时,您可以找到驱动程序及其关联执行程序的日志。只有为任务启用了重试策略,random-suffix 才会存在;否则,random-suffix 不会存在。
有关如何使用监控配置来配置任务以用于日志记录的更多信息,请参阅 运行 Spark 应用程序。