由于超过内存限制而被YARN杀死的容器。使用52.6 GB的50 GB物理内存。考虑提升spark.yarn.executor.memoryOverhead

时间:2015-10-01 12:12:57

标签: apache-spark yarn

使用以下配置使用1 TB数据运行spark作业:

33G执行程序内存 40位执行人 每个遗嘱执行人5个核心

17 g memoryoverhead

出现此错误的可能原因是什么?

2 个答案:

答案 0 :(得分:3)

你从哪里得到警告?哪个特定日志?你很幸运,你甚至得到一个警告:)。确实17g似乎已经足够了,但是你确实有1TB的数据。我不得不使用更多像30g的数据来获得更少的数据。

错误的原因是yarn为不存在于执行程序的内存空间中的容器使用额外的内存。我注意到更多的任务(分区)意味着使用更多的内存,并且洗牌通常更重,除了我没有看到任何其他与我所做的对应。不知何故,某种东西在不必要地吃着记忆。

似乎世界正在转向Mesos,也许它没有这个问题。更好的是,只使用Spark独立。

更多信息:http://www.wdong.org/wordpress/blog/2015/01/08/spark-on-yarn-where-have-all-my-memory-gone/。这个链接似乎有点死(这是对YARN吞噬记忆方式的深入研究)。此链接可能有效:http://m.blog.csdn.net/article/details?id=50387104。如果没有尝试谷歌搜索“火花在我的记忆消失的地方”

答案 1 :(得分:1)

一个可能的问题是您的虚拟内存与物理内存成比例变大。您可能希望在yarn-site.xml中将yarn.nodemanager.vmem-check-enabled设置为false以查看会发生什么。如果错误停止,则可能是问题。

我在其他地方回答了类似的问题并在那里提供了更多信息:https://stackoverflow.com/a/42091255/3505110