容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存

Posted

技术标签:

【中文标题】容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存【英文标题】:Container killed by YARN for exceeding memory limits.14.8 GB of 6 GB physical memory used 【发布时间】:2019-02-15 11:53:22 【问题描述】:

我有一份火花工作,我会做以下事情

    通过 spark sql 从 parquet 加载数据并将其转换为 熊猫df。数据大小只有 250 MB 运行 rdd.foreach 以 迭代相对一些数据集(1000行)并取 pandas df 从第 1 步开始并进行一些转换。

在一些迭代后,由于超出内存限制错误,我得到一个被 YARN 杀死的容器。

Container killed by YARN for exceeding memory limits. 14.8 GB of 6 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead

我无法理解为什么错误显示使用了 14.8 GB 的 6 GB 物理内存?

我尝试增加 spark.yarn.executor.memoryOverhead 我使用了以下命令

spark-submit --master yarn --deploy-mode cluster --num-executors 4 --executor-cores 2 --executor-memory 2G --conf spark.yarn.executor.memoryOverhead=4096 --py-文件 test.zip app_main.py

我正在使用火花 2.3

yarn.scheduler.minimum-allocation-mb = 512 MB
yarn.nodemanager.resource.memory-mb = 126 GB

【问题讨论】:

【参考方案1】:

这是使用 memoryOverhead 选项时的常见错误之一,最好使用其他选项来调整作业。

http://ashkrit.blogspot.com/2018/09/anatomy-of-apache-spark-job.html 帖子讨论了这个问题以及如何处理它。

【讨论】:

感谢您的回复。您能推断出为什么错误指出使用了 14.8 GB 的 6 GB 物理内存吗?正如我提到的 2GB 执行器内存 + 4GB 执行器内存开销 既然你用的是python,spark.python.worker.memory也在总内存分配中起作用

以上是关于容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存的主要内容,如果未能解决你的问题,请参考以下文章

Python Spark / Yarn 内存使用情况

容器被杀死 物理内存不足。

Docker容器生产实践1——永远设置容器内存限制

容器内存增加jvm不高

Spark在Hadoop集群上运行时虚拟内存超出限制

Pig : 容器在 cdh 5 中使用 oozie 运行超出物理内存限制