You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EMR on EKS中Spark作业失败自动重试5次的配置排查与禁用咨询

解决EMR Spark作业自动重试5次的问题

核心原因:重试来自EMR Step的默认配置

你遇到的5次重试,本质是EMR Step的默认重试次数(EMR 5.x/6.x的Step默认都会重试5次),而非Spark自身的作业重试机制。下面分版本给出解决方案和调试步骤。


EMR 5.33.0版本:禁用重试的配置方法

要关闭Step的自动重试,提交作业时直接指定重试次数为1(maxAttempts=1代表仅运行一次,失败不再重试):

  • AWS CLI提交:添加--step-args '{"RetryPolicy":{"MaximumAttempts":1}}'参数,示例:
    aws emr add-steps --cluster-id <你的集群ID> --steps Type=Spark,Name=MyJob,Args=[--class,com.example.MyMain,--conf,spark.stage.maxConsecutiveAttempts=1,--conf,spark.task.maxFailures=1,s3://my-bucket/job.jar],ActionOnFailure=CONTINUE,RetryPolicy='{"MaximumAttempts":1}'
    
  • 控制台创建Step:在「Configure step」页面找到「Retry policy」,把「Maximum attempts」设为1
  • boto3 SDK提交:在Step配置中加入RetryPolicy字段:
    'RetryPolicy': {
        'MaximumAttempts': 1
    }
    

另外,为了彻底避免Spark自身的Stage/Task重试,加上这两个Spark配置:

spark.stage.maxConsecutiveAttempts=1
spark.task.maxFailures=1

可以通过--conf参数传入,或者在集群的spark-defaults.conf中全局配置。


EMR 6.9.0版本:配置无效的原因及修复

你之前参考的是EMR on EKS的文档,那个retryPolicyConfiguration只适用于EKS上的Job Run,不适用于EC2上的EMR集群Step,所以配置了也不会生效。

正确配置方式(EC2集群)

和EMR 5.x完全一致:提交Step时指定RetryPolicy.MaximumAttempts=1,同时加上Spark自身的重试关闭参数,具体参考上面的CLI/控制台/SDK示例。


调试步骤,确认问题根源

  1. 查EMR Step日志:在EMR控制台的Step详情页,打开「Logs」链接,搜索「Retrying step」,确认是不是Step层面的重试
  2. 查Spark日志:进入Spark Application Master的日志页面,搜索「Attempt」,看有没有Stage或Task级别的重试记录
  3. 验证配置是否生效:
    • 用CLI查看Step配置:aws emr describe-step --cluster-id <集群ID> --step-id <Step ID>,检查RetryPolicy.MaximumAttempts是否为1
    • 打开Spark UI的「Environment」页面,确认spark.stage.maxConsecutiveAttempts和spark.task.maxFailures的值是否为1

总结

无论EMR 5.x还是6.x(EC2集群),要彻底禁用重试,必须同时做两件事:

  1. 把EMR Step的重试次数设为1,解决Step层面的5次重试
  2. 关闭Spark自身的Stage/Task重试,避免作业内部的重试逻辑

内容的提问来源于stack exchange,提问作者hsnsd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:05:28