当火花容器上发生OutOfMemory错误时会发生什么

时间:2018-10-23 14:20:31

标签: apache-spark yarn

在纱线簇上运行的我的spark应用程序崩溃了,我试图确定根本原因。在使用yarn logs -applicationId <application_id>从yarn所获得的日志中,我看到在块获取期间拒绝了一大堆连接,并且出现了一个内存不足错误。很难说出根本原因是什么。我的问题是当容器由于OutOfMemory异常而被杀死时会发生什么。因此,在容器日志中,我看到这是在容器上启动执行程序的方式

  

exec / bin / bash -c   “ LD_LIBRARY_PATH =“ / usr / hdp / current / hadoop-client / lib / native:/ usr / hdp / current / hadoop-client / lib / native / Linux-amd64-64:$ LD_LIBRARY_PATH”   $ JAVA_HOME / bin / java -server -Xmx5120m'-DENVIRONMENT = pt'   -Djava.io.tmpdir = $ PWD / tmp'-Dspark.history.ui.port = 18081''-Dspark.driver.port = 39112'   -Dspark.yarn.app.container.log.dir = / hadoop / hdfs / drive5 / hadoop / yarn / log / application_1539650094881_0116 / container_e111_1539650094881_0116_01_000024   -XX:OnOutOfMemoryError ='kill%p'org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url   spark://CoarseGrainedScheduler@192.168.1.13:39112 --executor-id 13   --hostname slave3.hadoop.tsl.com --cores 5 --app-id application_1539650094881_0116 --user-class-path文件:$ PWD / app .jar   1>   / hadoop / hdfs / drive5 / hadoop / yarn / log / application_1539650094881_0116 / container_e111_1539650094881_0116_01_000024 / stdout 2>   / hadoop / hdfs / drive5 / hadoop / yarn / log / application_1539650094881_0116 / container_e111_1539650094881_0116_01_000024 / stderr“

因此,该容器稍后将获得OutOfMemory。在这种情况下,火花会尝试获取新的容器,还是会导致应用程序崩溃?

我也看到很多Container killed by YARN for exceeding memory limits. 6.0 GB of 6 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead。在应用程序崩溃之前,似乎有许多此类错误。 spark是否重试阈值次数以重新启动容器?

1 个答案:

答案 0 :(得分:0)

通常在驱动程序和执行程序之间的内存分配不正确时会发生这种情况。您可以尝试使用Spark conf中的spark.driver.memory显式分配驱动程序的内存。

请参考https://spark.apache.org/docs/latest/configuration.html#application-properties进行其他设置