通过Spark提交提交时,获取失败的Spark作业的退出状态

时间:2018-08-29 07:21:27

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用NA(如[Mastering Apache Spark 2.0]中所述)。

0

要检查其状态。

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

答案 1 :(得分:0)

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

要获取失败代码,您需要通过spark-submit更改要提交的作业,并修改关键任务失败时产生的退出代码。

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

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

如果作业失败(状态== FAILED),您可以触发退出代码的应用程序,而不是0

 System.exit(1);

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

注意:对于独立模式,您甚至不需要一般使用Spark提交。该jar可以作为 java -jar ... 启动,它是相同的。