apache-spark - 当火花容器上发生 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是否重试阈值次数以重新启动容器?
解决方案
当驱动程序和执行程序上的内存分配不正确时,通常会发生这种情况。您可以尝试spark.driver.memory
在 spark conf 中显式分配驱动程序的内存。
有关其他设置,请参阅https://spark.apache.org/docs/latest/configuration.html#application-properties
推荐阅读
- pattern-matching - 与嵌套 json 响应属性的模式匹配
- javascript - Fancybox - 默认情况下如何显示缩略图?
- python - OpenCV 在关闭窗口时遇到问题
- python - 执行示例 Drive API 代码时收到 NameError
- python-3.x - 从另一个数据帧的值填充熊猫数据帧中的新列
- php - 在日期计算中保持前导 0
- node.js - 未调用 Fs.writeFile 回调
- liferay-7 - Liferay DXP (7.0) 拒绝重新索引
- webpack - Webpack 在错误的目录中寻找加载器?
- java - JVM 崩溃时覆盖的 GC 日志