我正在尝试运行用scala 11.8编写的spark应用程序,在EMR集群版本5.3.0上使用spark 2.1。 我使用以下json配置了集群:
[
{
"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 INFO TaskSetManager:完成任务79.0,阶段0.0(TID 79),在293毫秒,在ip-10-234-174-231.us-west-2.compute.internal(遗嘱执行人2)(78/11102) 17/02/01 10:08:27 INFO YarnAllocator:司机要求总共19290名遗嘱执行人。 17/02/01 10:08:27 INFO ApplicationMaster:最终应用程序状态:FAILED,exitCode:12,(原因:从Reporter线程抛出了1次异常。) 17/02/01 10:08:27 INFO SparkContext:从关机挂钩调用stop()
更新:
作为工作的一部分,我需要从s3中读取一些数据,
这样的事情:
sc.textFile( "s3n://stambucket/impressions/*/2017-01-0[1-9]/*/impression_recdate*)
如果我只花一天时间,就没有错误。
但是9我得到了这12个退出代码。甚至更奇怪的是,考虑到在客户端模式下运行9天的事实就好了。
答案 0 :(得分:2)
退出代码12是标准exit code in linux,表示内存不足。
Spark将每个执行程序进程使用的默认内存量设置为1gb。无论群集的节点/主机上可用的内存量如何,EMR都不会覆盖此值。 一种可能的解决方法是将maximizeResourceAllocation标志设置为true。
答案 1 :(得分:1)
尝试增加ApplicationMaster的Java堆spark.yarn.am.memory = 2G或将maxExecutors设置为合理的值spark.dynamicAllocation.maxExecutors = 400