【问题标题】:Get the Exit status for failed Spark jobs when submitted through Spark-submit通过 Spark-submit 提交时获取失败的 Spark 作业的退出状态
【发布时间】:2019-03-16 06:43:09
【问题描述】:

我在独立模式下使用 spark-submit 提交 spark 作业。 所有这些作业都是使用 cron 触发的。 我想监视这些作业是否有任何故障。 但是,如果应用程序中发生任何异常(例如 ConnectionException),则使用 spark-submit 将终止作业,并且我得到 0 作为 spark-submit 的退出状态。 同样在 Spark-UI 上,它显示 Job 状态为 FINISHED。 如果发生任何异常,可以做些什么来使火花作业失败?

【问题讨论】:

标签: apache-spark spark-submit apache-spark-standalone


【解决方案1】:

您可以使用spark-submit --status(如 [掌握 Apache Spark 2.0] 中所述)。

spark-submit --status [submission ID]

检查其状态。

  1. 您可以通过调用外部进程 (spark-submit) 提交您的作业并读取输出流以解析和提取 submissionId
  2. 然后,通过调用上述过程检查您的工作状态。

【讨论】:

  • 是的,我知道了,但我们将从 spark web-ui 获取 [提交 ID],我希望此监控自动化
  • 您可以通过调用外部进程并读取输出流来解析和提取submissionId 来提交您的工作。然后,检查您的工作状态
【解决方案2】:

Spark-submit 提交的是申请,而不是工作。因此,无论任何作业是否失败,如果应用程序成功启动和停止,您自然会看到退出代码 0 和 FINISHED

为了能够获得失败代码,您需要更改您通过 spark-submit 提交的作业,并修改它在关键作业失败时生成的退出代码。

您可以在提交的 spark 作业中监视作业状态,例如在上下文关闭或退出之前。你可以使用这个:

JavaSparkContext sc;
... 
JavaSparkStatusTracker statusTracker = sc.statusTracker();
...
final SparkJobInfo jobInfo = statusTracker.getJobInfo(jobId);
final JobExecutionStatus status = jobInfo.status();

如果作业失败(status == FAILED),您可以触发退出应用程序,代码不为 0

 System.exit(1);

这将允许应用程序正确关闭 Spark 上下文并完成。然后您将能够检查 spark-submit 命令的退出状态,因为您是在独立模式下启动的。

注意:对于独立模式,您通常甚至不需要使用 Spark-submit。 jar 可以作为 java -jar ... 启动,它是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2016-09-09
    • 2016-11-09
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多