Scala spark exitCode:12是什么意思?
我正在尝试在EMR集群版本5.3.0上运行一个用scala 11.8和spark 2.1编写的spark应用程序。 我使用以下json配置集群:Scala spark exitCode:12是什么意思?,scala,apache-spark,cluster-computing,yarn,emr,Scala,Apache Spark,Cluster Computing,Yarn,Emr,我正在尝试在EMR集群版本5.3.0上运行一个用scala 11.8和spark 2.1编写的spark应用程序。 我使用以下json配置集群: [ { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties"
[
{
"Classification": "hadoop-env",
"Configurations": [
{
"Classification": "export",
"Configurations": [],
"Properties": {
"JAVA_HOME": "/usr/lib/jvm/java-1.8.0"
}
}
],
"Properties": {}
},
{
"Classification": "spark-env",
"Configurations": [
{
"Classification": "export",
"Configurations": [],
"Properties": {
"JAVA_HOME": "/usr/lib/jvm/java-1.8.0"
}
}
],
"Properties": {}
}
]
如果我尝试在客户机模式下运行,一切都会正常运行。尝试以群集模式运行应用程序时失败,状态代码为12
这是主日志的一部分,我在其中看到状态代码:
17/02/01 10:08:26信息任务集经理:在ip-10-234-174-231.us-west-2.compute.internal(执行者2)上以293毫秒的时间完成0.0阶段(TID 79)中的任务79.0(78/11102)
17/02/01 10:08:27信息所有者:驾驶员请求的执行者总数为19290人。
17/02/01 10:08:27信息应用程序管理员:最终应用程序状态:失败,退出代码:12,(原因:从报告程序线程引发异常1次。)
17/02/01 10:08:27信息SparkContext:从关机挂钩调用stop()
更新:
作为工作的一部分,我需要从s3读取一些数据,
大概是这样的:
sc.textFile(“s3n://stambucket/impressions/*/2017-01-0[1-9]/*/impression\u recdate*)
如果我只花一天,就不会有错误。
但是用9,我得到了这12个退出代码。甚至更奇怪的是,在客户端模式运行9天是很好的。 < P>退出代码12是一个发出内存信号的标准。< /P> Spark将每个执行器进程使用的默认内存量设置为1gb。无论群集节点/主机上的可用内存量如何,EMR都不会覆盖此值。
一种可能的修复方法是将maximizeResourceAllocation标志设置为true。尝试增加ApplicationMaster的Java堆spark.Thread.am.memory=2G或将maxExecutors设置为合理的值spark.DynamicLocation.maxExecutors=400
谷歌搜索表明,这意味着您丢失了一些jar文件。这将适合在本地工作,但不适合在集群上工作。请检查您是否已配置了适当的jar,以便在任何地方都可以使用正确的jar,emr-5.x默认情况下已经使用Java 8,因此您的配置是不必要的。我不认为这些配置会导致此问题,但我不会uld建议删除这些配置。@TheArchetypalPaul如果确实是这样,我怎么知道哪个罐子丢失了?你能分享你找到的参考资料吗。@JonathanKelly你的回答让我有点惊讶,因为Spark的EMR说,如果你在集群模式下编写提交驱动程序,驱动程序将我使用Java 7,但设置环境可以确保执行者使用Java 8。为此,我需要设置此配置。@NetanelRabinowitz我刚刚搜索了“退出代码12”spark。我找到的几乎所有引用(不多)建议是JAR。我不知道如何识别丢失的JAR。为什么400是一个合理的值?此外,EMR在群集模式下运行,除非您使用
spark submit
并将--部署模式设置为客户端模式-请参阅。根据spark文档,设置spark.warn.am.memory
仅适用于client模式,您应该使用spark.driver.memory
作为群集模式。