我想阻止Spark重试Spark应用程序,以防引发某些特殊异常。我只想在满足某些条件的情况下限制重试次数。否则,我想要默认的重试次数。
请注意,Spark应用程序只运行一个Spark作业。
我尝试在异常的情况下设置javaSparkContext.setLocalProperty("spark.yarn.maxAppAttempts", "1");
,但它仍会重试整个作业。
我按如下方式提交Spark应用程序:
spark-submit --deploy-mode cluster theSparkApp.jar
我有一个用例,如果输出是由同一作业的先前重试创建的,我想删除输出,但如果输出文件夹不为空(在第一次重试中),则输出失败。你能想到其他任何方法来实现这个目标吗?
答案 0 :(得分:1)
我有一个用例,如果输出是由同一作业的先前重试创建的,我想删除输出,但如果输出文件夹不为空(在第一次重试中),则输出失败。你能想到其他任何方法来实现这个目标吗?
您可以使用TaskContext来控制Spark作业的行为,例如重试次数,如下所示:
val rdd = sc.parallelize(0 to 8, numSlices = 1)
import org.apache.spark.TaskContext
def businessCondition(ctx: TaskContext): Boolean = {
ctx.attemptNumber == 0
}
val mapped = rdd.map { n =>
val ctx = TaskContext.get
if (businessCondition(ctx)) {
println("Failing the task because business condition is met")
throw new IllegalArgumentException("attemptNumber == 0")
}
println(s"It's ok to proceed -- business condition is NOT met")
n
}
mapped.count