使用以下配置使用1 TB数据运行spark作业:
33G执行程序内存 40位执行人 每个遗嘱执行人5个核心
17 g memoryoverhead
出现此错误的可能原因是什么?
答案 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