Spark Java编程标记任务为失败



由于spark提供了作业失败检测和重试机制的特性,我想在我的代码中使用这个特性,这意味着在某些情况下,我想将spark job标记为失败,然后spark将再次重试该作业。我试图找出工作/阶段状态,我发现了这个。和实施:

JavaSparkContext jsc = JavaSparkContext.fromSparkContext(this.spark.sparkContext());
JavaSparkStatusTracker statusTracker = jsc.statusTracker();
for(int jobId: statusTracker.getActiveJobIds()) {
SparkJobInfo jobInfo = statusTracker.getJobInfo(jobId);
for(int stageId: jobInfo.stageIds()) {
SparkStageInfo stageInfo = statusTracker.getStageInfo(stageId);
LOGGER.warn("Stage id=" + stageId + "; name = " + stageInfo.name()
+ "; completed tasks:" + stageInfo.numCompletedTasks()
+ "; active tasks: " + stageInfo.numActiveTasks()
+ "; all tasks: " + stageInfo.numTasks()
+ "; submission time: " + stageInfo.submissionTime());
}
}

在这里,我能够找出作业/任务/阶段状态,但是否有任何方法(API)将spark作业标记为失败?另外,实现重试机制而不是为重试编写自定义代码是一种好方法吗?

换句话说,您想重新安排已经成功完成的工作,对吗?

虽然SparkContext提供了通过ID取消作业的API,但没有类似的API来重新运行它。

但是,它提供了两个低级api来执行自定义作业:同步runJob

  • 异步submitJob

对于两者,您都需要提供您想要重新处理的RDD和处理分区的函数。

但更简单的选择是,如果您知道需要执行哪个操作,则只需重新运行启动作业的操作。

最新更新