草庐IT

hadoop - 退出代码和退出状态是否意味着 Spark ?

coder 2024-01-05 原文

当在 yarn 上运行 Spark 时,我总是看到退出代码和退出状态:

这里有一些:

  • 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:...
  • ...Container killed on request. Exit code is 137...

  • 我从来没有发现这些消息有用。...有没有机会解释这些消息实际上出了什么问题?我在高低处搜索了解释错误的表格,但一无所获。

    我只能从上面的代码中破译的是退出代码52,但这是因为我查看了源代码here。据说这是OOM。

    我是否应该停止尝试解释其余的退出代码和退出状态?还是我错过了一些明显的方式,这些数字实际上意味着什么?

    即使有人告诉我exit codeexit statusSIGNAL之间的区别也很有用。但是我现在只是在随机猜测,似乎我周围的其他人都在使用spark。

    最后,为什么某些退出代码小于零,又该如何解释呢?

    例如。 Exit status: -100. Diagnostics: Container released on a *lost* node

    最佳答案

    退出代码和状态或信号都不是Spark特定的,而是进程在类Unix系统上工作的一部分方式。

    退出状态和退出代码

    退出状态和退出代码是同一事物的不同名称。退出状态是介于0到255之间的数字,它指示进程终止后的结果。退出状态0通常表示成功。其他代码的含义取决于程序,应在程序的文档中进行说明。但是,有一些已建立的标准代码。有关详细列表,请参见this answer

    Spark使用的退出代码

    Spark sources中,我发现了以下内容
    退出代码。它们的描述来自代码中的日志语句和注释,以及我对退出状态出现处的代码的理解。

    Hive Thrift Server中的Spark SQL CLI驱动程序

  • 3:设置stdoutstderr流时发生UnsupportedEncodingException时的

  • Spark / yarn
  • 10:如果发生未捕获的异常,则
  • 11:,如果发生了不止spark.yarn.scheduler.reporterThread.maxFailures执行程序失败
  • 12:,如果报告程序线程因
  • 异常而失败
  • 13:,如果程序在用户初始化spark上下文之前终止,或者spark上下文在超时之前未初始化。
  • 14:这被声明为EXIT_SECURITY,但从未使用过
  • 15:如果用户类抛出异常
  • ,则
  • 16:(如果在报告最终状态之前调用了关闭挂钩)。源代码中的注释解释了用户应用程序的预期行为:

    The default state of ApplicationMaster is failed if it is invoked by shut down hook. This behavior is different compared to 1.x version. If user application is exited ahead of time by calling System.exit(N), here mark this application as failed with EXIT_EARLY. For a good shutdown, user shouldn't call System.exit(0) to terminate the application.


  • 执行者
  • 50:已到达默认的未捕获异常处理程序
  • 51:记录默认的未捕获异常处理程序,并且在记录异常
  • 时遇到异常
  • 52:已到达默认的未捕获异常处理程序,并且未捕获异常是OutOfMemoryError
  • 53:多次尝试(错误的spark.local.dir?)后, DiskStore无法创建本地临时目录
  • 54:多次尝试
  • 后, ExternalBlockStore未能初始化
  • 55:多次尝试
  • 后, ExternalBlockStore无法创建本地临时目录
  • 56:执行程序无法向驱动程序发送心跳超过“spark.executor.heartbeat.maxFailures”次数。
  • 101:如果未找到子主类,则通过spark-submit返回。在客户端模式(命令行选项--deploy-mode client)中,子主类是用户提交的应用程序类(--class CLASS)。在集群模式下(--deploy-mode cluster),子主类是特定于集群管理器的提交/客户端类。

  • 退出码大于128

    这些退出代码很可能是由以下情况触发的程序关闭导致的:
    Unix信号。可以通过从退出代码中减去128来计算信号编号。此blog post(最初在this question中链接)对此进行了更详细的说明。还有一个很好的answer explaining JVM-generated exit codes。如ExecutorExitCodes.scala中的注释所述,Spark可以使用这种假设

    其他退出代码

    除上面列出的退出代码外,Spark源中将System.exit()调用的数量设置为1或-1作为退出代码。就我而言,tell -1似乎用于指示缺少或不正确的命令行参数,而1则指示所有其他错误。

    讯号

    信号是一种事件,它允许将系统消息发送到进程。例如,这些消息用于要求进程重新加载其配置(SIGHUP)或终止自身(SIGKILL)。标准信号列表可以在signal(7) man page中的“标准信号”部分中找到。

    正如 rake ·莫里茨(Rick Moritz)在下面的评论中解释的(谢谢!),Spark设置中最可能的信号源是
  • 超过容器大小,完成作业,进行动态缩小或用户
  • 中止作业时,集群资源管理器
  • 操作系统:作为受控系统关闭的一部分,或者如果达到某些资源限制(内存不足,硬配额超过,磁盘上没有剩余空间等),则为
  • 杀死工作的本地用户

  • 我希望这可以使“ Spark ”这些消息的含义更加清楚。

    关于hadoop - 退出代码和退出状态是否意味着 Spark ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45428145/

    有关hadoop - 退出代码和退出状态是否意味着 Spark ?的更多相关文章

    1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

      给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

    3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

      如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

    4. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

      在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

    5. ruby - 检查数组是否在增加 - 2

      这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

    6. ruby-on-rails - 跳过状态机方法的所有验证 - 2

      当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

    7. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

      我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

    8. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

      我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

    9. ruby - 检查日期是否在过去 7 天内 - 2

      我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

    10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

      这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

    随机推荐