超出内存限制,容器被YARN杀死。物理内存使用了50GB中的52.6GB。考虑提高spark.yarn.executor.memoryOverhead。

5

使用以下配置运行处理1 TB数据的Spark作业:

33G执行器内存 40个执行器 每个执行器5个核心

17g的内存overhead

导致此错误的可能原因是什么?


如果您可以在控制台中发布完整的错误信息,那将会很有帮助。 - WoodChopper
你有没有考虑增加spark.yarn.executor.memoryOverhead的值? - lxg
谢谢您的回复lxg。spark.yarn.executor.memoryOverhead是执行器内存的0.1,我已经给了它执行器内存的0.5。我应该增加多少,背景中发生了什么导致了这个警告? - Renu
2个回答

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。如果不行,请尝试谷歌搜索“spark on yarn where have all my memory gone”


正如@BarbarosAlp所提到的,链接是404错误!请始终在您的问题中提供链接的要点.... - gsamaras
@gsamaras 已更新 - samthebest
Sam,抱歉,但第一个链接仍然失效..:/ - gsamaras

1

可能出现的问题是虚拟内存占用比例远大于物理内存。您可以在yarn-site.xml中将yarn.nodemanager.vmem-check-enabled设置为false,以查看是否有所改善。如果错误停止,则可能是该问题。

我曾在其他地方回答过类似的问题,并在那里提供了更多信息:https://dev59.com/aFkR5IYBdhLWcg3w1gZt#42091255


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接