在Apache Spark中,存在几种不同级别的重试机制,以应对不同的失败情况。下面分别介绍这些重试机制以及如何配置它们:
1. Task级别的重试
这是最基本的重试机制,用于处理单个task的失败。每个task在执行过程中如果失败了,Spark会自动重新调度并重试该task。
配置参数:
spark.task.maxFailures
: 设置单个task的最大失败次数。默认值通常为4。
如何设置:
- 通过Spark配置文件(
spark-defaults.conf
): properties深色版本
1spark.task.maxFailures 3
- 通过代码设置(Scala/Java): scala
深色版本
1val conf = new SparkConf() 2 .setAppName("My App") 3 .setMaster("local") 4 .set("spark.task.maxFailures", "3")
- 通过命令行参数设置(使用
spark-submit
): bash深色版本
1bin/spark-submit --class org.apache.spark.examples.SparkPi \ 2 --conf spark.task.maxFailures=3 \ 3 examples/jars/spark-examples_*.jar
2. Application级别的重试
这种重试机制发生在YARN集群中,用于处理ApplicationMaster (AM) 的失败。如果AM失败,YARN会尝试重新启动AM,直到达到最大重试次数。
配置参数:
spark.yarn.maxAppAttempts
: 设置Spark应用的最大尝试次数。默认值为2。
如何设置:
- 通过Spark配置文件(
spark-defaults.conf
): properties深色版本
1spark.yarn.maxAppAttempts 3
- 通过代码设置(Scala/Java): scala
深色版本
1val conf = new SparkConf() 2 .setAppName("My App") 3 .setMaster("yarn") 4 .set("spark.yarn.maxAppAttempts", "3")
- 通过命令行参数设置(使用
spark-submit
): bash深色版本
1bin/spark-submit --class org.apache.spark.examples.SparkPi \ 2 --master yarn \ 3 --conf spark.yarn.maxAppAttempts=3 \ 4 examples/jars/spark-examples_*.jar
3. Job级别的重试
对于Job级别的重试,Spark本身并不直接提供这样的配置选项。但是,可以通过一些间接的方式来实现Job级别的重试,例如在驱动程序端编写重试逻辑。
实现方式:
- 使用外部库如
scala.util.Try
、scala.concurrent.Future
或者scala.concurrent.Await
来实现重试逻辑。 - 编写自己的重试逻辑,捕获异常并根据需要重试。
总结
- Task级别的重试 是最基础的重试机制,用于处理单个task的失败。
- Application级别的重试 是YARN集群特有的,用于处理ApplicationMaster的失败。
- Job级别的重试 通常需要自己编写逻辑来实现。