我正在独立模式下使用spark-submit提交spark作业。 所有这些作业都是使用cron触发的。 我想监视这些作业是否有任何故障。 但是,如果应用程序中发生任何异常(例如ConnectionException),则使用spark-submit终止作业,并且我得到0作为spark-submit的退出状态。 同样在Spark-UI上,它显示作业状态为已完成。 万一发生任何异常,如何做才能使Spark作业失败?
答案 0 :(得分:0)
您可以使用NA
(如[Mastering Apache Spark 2.0]中所述)。
0
要检查其状态。
spark-submit --status
。 答案 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 ... 启动,它是相同的。