在EMR集群上运行的Spark作业。 system.exit(0)用于优雅地完成作业,但仍然是Step on EMR失败

时间:2016-09-19 19:11:50

标签: apache-spark amazon-emr

在火花工作。我正在使用if file找不到system.exit(0)。它应该优雅地完成工作。本地已成功完成。但是当我在EMR上运行时。步骤失败。

1 个答案:

答案 0 :(得分:2)

EMR使用YARN进行集群管理并启动Spark应用程序。因此,当您在EMR中运行带有--deploy-mode: cluster的Spark应用程序时,Spark应用程序代码本身并未在JVM中运行,而是由ApplicationMaster类执行。

浏览ApplicationMaster代码可以解释当您尝试执行System.exit()时会发生什么。用户应用程序在startUserApplication中启动,然后在用户应用程序返回后调用finish方法。但是,当您致电System.exit(0)时,执行的内容是a shutdown hook,它会发现您的代码尚未成功完成,并将其标记为EXIT_EARLY失败。它也有这个有用的评论:

  // 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.