首页 > 解决方案 > 当火花容器上发生 OutOfMemory 错误时会发生什么

问题描述

我在 yarn 集群上运行的 spark 应用程序崩溃了,我正在尝试确定根本原因。在我使用 yarn 获得的日志中,yarn logs -applicationId <application_id>我看到一大堆连接在块获取期间被拒绝,还有一个内存不足错误。很难说根本原因是什么。我的问题是当容器因 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.CoarseGrain -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 file:$PWD /应用.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。在这种情况下,spark 会尝试获取新容器还是最终导致应用程序崩溃?

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

标签: apache-sparkhadoop-yarn

解决方案


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

有关其他设置,请参阅https://spark.apache.org/docs/latest/configuration.html#application-properties


推荐阅读