【问题标题】:pass custom exitcode from yarn-cluster mode spark to CLI将自定义退出代码从纱线集群模式 spark 传递到 CLI
【发布时间】:2017-05-13 14:34:12
【问题描述】:

我通过 spark-submit 启动了一个纱线集群模式的 spark 作业。 为了指示部分失败等,我想将退出代码从驱动程序传递给调用 spark-submit 的脚本。

我尝试了 System.exit 和在驱动程序中抛出 SparkUserAppException,但在这两种情况下 CLI 只得到 1,而不是我传递的退出代码。

我认为不可能通过自定义退出代码,因为驱动程序传递的任何退出代码都会转换为纱线状态,纱线会将任何失败的退出代码转换为1或失败。

【问题讨论】:

  • 你能告诉我你用来提交作业的命令吗?
  • $SPARK_HOME/bin/spark-submit --verbose .... --master yarn --deploy-mode cluster .... 。我将 spark-2.0.0 与 hadoop 2.3 一起使用。您正在寻找任何特定的选择吗?
  • 我认为 --deploy-mode 客户端会帮助你。或者至少通过一些技巧,你应该能够实现你所需要的。
  • 我不能使用客户端模式,如果在yarn cluster模式下无法使用,我希望有人确认一下。

标签: apache-spark hadoop-yarn


【解决方案1】:

通过查看 spark 代码,我可以得出以下结论:

client 模式下是可能的。看SparkSubmit类的runMain()方法

而在cluster 模式下,无法获取驱动程序的退出状态,因为您的驱动程序类将在其中一个执行程序中运行。

有一个可能/可能不适合的替代解决方案适合您的用例:

托管带有端点的 REST API,以接收来自驱动程序代码的状态更新。在任何异常情况下,让您的驱动程序代码使用此端点来更新状态。

【讨论】:

  • spark-submit 仍会将纱线退出代码返回给 cli。所以我们需要一种方式让驱动直接让cli知道exitCode。有几种丑陋的方法可以做到这一点。 :P
  • 是的,有。我可以知道您为什么不能使用客户端模式吗?
  • 集群模式推荐用于生产。在具有非统一配置的节点上,恕我直言集群模式会注意驱动程序在需要 RAM、CPU 的节点上运行。
【解决方案2】:

您可以将退出代码保存在输出文件中(在 HDFS 或本地 FS 上)并让您的脚本等待此文件出现,阅读并继续。这绝对不是一种优雅的方式,但它可以帮助您继续。 保存文件时,请注意该位置的权限。您的 spark 进程必须具有 RW 访问权限。

【讨论】:

  • 是的,这是我在其他评论中所说的丑陋方式。
猜你喜欢
  • 2018-10-29
  • 2017-08-30
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2023-04-08
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多