本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用作业重试策略
EMR在EKS版本 6.9.0 及更高版本的 Amazon 中,您可以为任务运行设置重试策略。重试策略会在作业驱动程序容器组(pod)失败或被删除时自动重新启动。这使得长时间运行的 Spark 流式传输作业在出现故障时更具弹性。
设置任务的重试策略
要配置重试策略,请使用提供一个RetryPolicyConfiguration
字段。StartJobRunAPI此处显示了一个示例 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 文档
注意
每增加一次任务驱动程序的执行都将作为另一次任务运行计费,并且将受 Amaz 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 应用程序。