运行1tb数据的spark job,配置如下:
33G执行内存40执行人每个executor 5个内核
17g内存开销
这个错误可能的原因是什么?
你从哪里得到这个警告?哪些特定的日志?你还能得到警告真是太幸运了。事实上,17g似乎足够了,但你确实有1TB的数据。我不得不用30g来传输比这更少的数据。
错误的原因是yarn为容器使用了额外的内存,而这些内存并不存在于执行器的内存空间中。我注意到更多的任务(分区)意味着更多的内存使用,并且shuffle通常更重,除此之外,我没有看到任何其他与我所做的对应。有什么东西在不必要地消耗内存。
看起来世界正在向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哪里有我所有的记忆去了"
一个可能的问题是您的虚拟内存与物理内存的比例变得非常大。您可能想在yarn-site.xml中将yarn.nodemanager.vmem-check-enabled
设置为false
,看看会发生什么。如果错误停止,则可能是问题。
我在别处回答了一个类似的问题,并提供了更多的信息:https://stackoverflow.com/a/42091255/3505110