spark exitCode: 12 是什么意思?

What does spark exitCode: 12 mean?

我正在尝试 运行 在 EMR 集群版本 5.3.0 上使用 scala 11.8、spark 2.1 编写的 spark 应用程序。 我使用以下 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: Finished task 79.0 in stage 0.0 (TID 79) in 293 ms on ip-10-234-174-231.us-west-2.compute.internal (executor 2) (78/11102) 17/02/01 10:08:27 INFO YarnAllocator: Driver requested a total number of 19290 executor(s). 17/02/01 10:08:27 INFO ApplicationMaster: Final app status: FAILED, exitCode: 12, (reason: Exception was thrown 1 time(s) from Reporter thread.) 17/02/01 10:08:27 INFO SparkContext: Invoking stop() from shutdown hook

更新:

作为工作的一部分,我需要从 s3 读取一些数据, 是这样的: sc.textFile( "s3n://stambucket/impressions/*/2017-01-0[1-9]/*/impression_recdate*) 如果我只用一天,就没有错误。 但是对于 9 我得到了这个 12 退出代码。更奇怪的是,考虑到 运行在客户端模式下 9 天就好了。

退出代码 12 是标准 exit code in linux 表示内存不足。

Spark 将每个执行程序进程使用的默认内存量设置为 1GB。无论集群 nodes/master 上的可用内存量如何,EMR 都不会覆盖此值。 一种可能的修复方法是将 maximizeResourceAllocation 标志设置为 true。

尝试增加ApplicationMaster的Java堆spark.yarn.am.memory=2G或将maxExecutors设置为合理的值spark.dynamicAllocation.maxExecutors=400

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