问题一: Spark Job执行了两次

由于job内部有一个逻辑,如果第一次失败,第二次重试已没有意义,那么就没有必要让它跑第二次,如下图所示:

yarn 问题整理

首先调查为什么默认是尝试两次,结果如下:

<property>
    <name>yarn.resourcemanager.am.max-attempts</name>
    <value>2</value>
    <source>yarn-default.xml</source>
</property>

这个配置是个全局配置,如果改成1,那么所有提交的job都将只尝试运行一次,显然不太合适,我的目标是只针对当前job进行设置,而不影响其他job。

可以在提交spark job是配置如下参数:

spark-submit --conf spark.yarn.maxAppAttempts=1 <application_name>

或者:

      spark = SparkSession
        .builder()
        .master(runArgs.sparkMaster) // "local" to run locally
        .appName("Processing")
        .config("spark.sql.shuffle.partitions", 8) // set parallelism
        .config("spark.yarn.maxAppAttempts", 1) // set job max attempts 
        .getOrCreate()

注:如果spark.yarn.maxAppAttempts 的值大于yarn.resourcemanager.am.max-attempts, 并不会生效,小于是可以的。

以上是真的spark job设置的,那么hadoop Mapreduce job如何设置呢?

<property>
    <name>mapreduce.am.max-attempts</name>
    <value>2</value>
    <source>mapred-default.xml</source>
</property>

猜测是通过mapreduce.am.max-attempts 进行设置,没有验证

参考:

https://stackoverflow.com/questions/38709280/how-to-limit-the-number-of-retries-on-spark-job-failure

http://johnjianfang.blogspot.com/2015/04/the-number-of-maximum-attempts-of-yarn.html

相关文章: