【问题标题】:Spark Java programmatically mark task as failureSpark Java 以编程方式将任务标记为失败
【发布时间】:2021-08-27 14:01:29
【问题描述】:

由于 spark 提供了作业失败检测和重试机制的功能,我想在我的代码中使用这个功能,这意味着在某些情况下我想将 spark Job 标记为失败,然后 spark 会再次重试该作业。 我试图找出 Job/Stage 状态,我找到了this。并实施:

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 作业标记为失败?另外,实现重试机制而不是编写自定义代码进行重试是否是一种好方法?

【问题讨论】:

    标签: apache-spark retry-logic


    【解决方案1】:

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

    虽然SparkContextcancel job by ID 提供API,但没有类似的API 可以重新运行它。

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

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

    但更简单的选择是重新运行重新开始工作的操作,前提是您知道需要执行哪个操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 2017-08-14
      • 2022-11-12
      相关资源
      最近更新 更多