我通过spark-submit开始了一个纱线群集模式火花作业。 为了表示部分失败等,我想将exitcode从驱动程序传递给调用spark-submit的脚本。
我尝试了两个,System.exit并在驱动程序中抛出SparkUserAppException,但在这两种情况下CLI只得到1,而不是我传递的exitcode。
我认为传递自定义exitcode是不可能的,因为驱动程序传递的任何exitcode都将转换为yarn状态,yarn会将任何失败的exitCode转换为1或失败。
答案 0 :(得分:1)
通过查看火花代码,我可以得出结论:
可以client
模式。查看SparkSubmit类
runMain()
方法
在cluster
模式下,无法获得驱动程序的退出状态,因为您的驱动程序类将在其中一个执行程序中运行。
对于您的用例,有一个备用解决方案可能/可能不合适:
使用端点托管REST API,以从驱动程序代码接收状态更新。如果出现任何异常,请让您的驱动程序代码使用此端点来更新状态。
答案 1 :(得分:1)
您可以将退出代码保存在输出文件中(在HDFS或本地FS上),并使您的脚本等待此文件外观,阅读并继续。这绝对不是一种优雅的方式,但它可以帮助你继续。 保存文件时,请注意此位置的权限。您的火花过程必须具有RW访问权限。