Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在EMR群集上运行的Spark作业。system.exit(0)用于优雅地完成作业,但仍会在EMR上失败_Apache Spark_Amazon Emr - Fatal编程技术网

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

Apache spark 在EMR群集上运行的Spark作业。system.exit(0)用于优雅地完成作业,但仍会在EMR上失败,apache-spark,amazon-emr,Apache Spark,Amazon Emr,在星火工作。如果在系统中找不到文件,我正在使用。退出(0)。它应该优雅地完成这项工作。在本地,它已成功完成。但当我在EMR上运行时。步骤失败。EMR用于群集管理和启动Spark应用程序。因此,当您在EMR中运行带有--deploy mode:cluster的Spark应用程序时,Spark应用程序代码不是单独在JVM中运行的,而是由类执行的 浏览ApplicationMaster代码可以解释尝试执行System.exit()时发生的情况。在中启动用户应用程序,然后在用户应用程序返回后调用fini

在星火工作。如果在系统中找不到文件,我正在使用。退出(0)。它应该优雅地完成这项工作。在本地,它已成功完成。但当我在EMR上运行时。步骤失败。

EMR用于群集管理和启动Spark应用程序。因此,当您在EMR中运行带有
--deploy mode:cluster
的Spark应用程序时,Spark应用程序代码不是单独在JVM中运行的,而是由类执行的

浏览
ApplicationMaster
代码可以解释尝试执行
System.exit()
时发生的情况。在中启动用户应用程序,然后在用户应用程序返回后调用
finish
方法。但是,当您调用
System.exit(0)
时,执行的是看到您的代码没有成功完成,并将其标记为
exit\u 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.

EMR日志文件中报告的错误是什么?它们是触发作业完成的正确方法吗?除了等待
main
什么也不返回之外,您可能需要找到一种方法,在您想要完成作业时从main方法返回。例如,一种有点粗俗的方法可能是从您想要的完成点抛出一个异常,在
main
中捕获该异常,然后在那里优雅地退出。根据代码的结构,可能有更好的方法。谢谢你,伊万。有没有办法“抓住”系统出口?如果一个图书馆正在调用它,而我需要绕过它。我不知道。我所知道的唯一方法是使用SecurityManager——然而,这正是Thread所做的,而且似乎不可能在同一个Java应用程序中注册多个安全管理器。在中有一个一般性的讨论,但这似乎也是其中提到的唯一方法。