在纱线上运行火花时,我一直看到退出代码和退出状态:
以下是一些:
hamburger-b2
CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM
...failed 2 times due to AM Container for application_1431523563856_0001_000002 exited with exitCode: 10...
...Exit status: 143. Diagnostics: Container killed on request
...Container exited with a non-zero exit code 52:...
我从来没有发现任何这些消息是有用的......有没有机会解释这些消息究竟出了什么问题?我已经搜索过高低的表格来解释错误,但没有。
我能够解读上述内容的唯一一个是退出代码52,但这是因为我查看了源代码here。这是说这是一个OOM。
我是否应该停止尝试解释其余退出代码并退出状态?或者我错过了一些明显的方式,这些数字实际意味着什么?
即使有人可以告诉我...Container killed on request. Exit code is 137...
,exit code
和exit status
之间的区别,但这些区别很有用。但我现在只是随意猜测,而且我周围的其他所有人都使用了火花。
最后,为什么一些退出代码小于零以及如何解释它们?
E.g。 SIGNAL
答案 0 :(得分:35)
退出代码和状态以及信号都不是特定于Spark的,但部分方法是在类Unix系统上工作。
退出状态和退出代码是同一件事的不同名称。退出状态是0到255之间的数字,表示终止后的进程的结果。退出状态0通常表示成功。其他代码的含义取决于程序,应在程序文档中描述。但是,有一些既定的标准代码。有关完整列表,请参阅this answer。
在Spark sources我发现了以下内容 退出代码。它们的描述来自代码中的日志语句和注释,以及我对退出状态出现的代码的理解。
stdout
和stderr
流时发生UnsupportedEncodingException。spark.yarn.scheduler.reporterThread.maxFailures
个执行程序失败EXIT_SECURITY
但从未使用过如果由关闭挂钩调用,则
ApplicationMaster
的默认状态失败。 与1.x版本相比,此行为有所不同。 如果通过调用System.exit(N)
提前退出用户应用程序,请在此处标记 此应用程序因EXIT_EARLY
失败。为了获得良好的关机,用户不应该打电话System.exit(0)
终止申请。
56:执行者无法向驱动程序发送心跳超过" spark.executor.heartbeat.maxFailures"次。
101:如果找不到子主要类,则返回spark-submit。在客户端模式(命令行选项--deploy-mode client
)中,子主类是用户提交的应用程序类(--class CLASS
)。在集群模式(--deploy-mode cluster
)中,子主类是特定于集群管理器的提交/客户端类。
这些退出代码很可能是由程序关闭引发的 一个Unix信号。可以通过从退出代码中减去128来计算信号编号。这在blog post(最初在this question中链接)中有更详细的解释。还有一个很好的answer explaining JVM-generated exit codes。 Spark使用这个假设,如ExecutorExitCodes.scala
中的评论所述除了上面列出的退出代码外,Spark源设置1或-1中的System.exit()
次调用作为退出代码。据我所知,-1似乎用于表示缺少或不正确的命令行参数,而1表示所有其他错误。
信号是一种允许将系统消息发送到进程的事件。例如,这些消息用于请求进程重新加载其配置(SIGHUP
)或终止自身(SIGKILL
)。可以在标准信号部分的signal(7) man page中找到标准信号列表。
正如Rick Moritz在下面的评论中解释的那样(谢谢!),Spark设置中最可能的信号源是
我希望通过spark可能意味着这些消息更加清晰。