spark exitCode:12是什么意思?

时间:2017-02-01 12:56:06

标签: scala apache-spark cluster-computing yarn emr

我正在尝试运行用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天的事实就好了。

2 个答案:

答案 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

https://issues.apache.org/jira/browse/SPARK-19226