2017-04-19 73 views
0

我得到这个内存错误在我的减速器:EMR - MapReduce的内存错误

Container is running beyond physical memory limits. Current usage: 6.1 GB of 6 GB physical memory used; 10.8 GB of 30 GB virtual memory used.

所以,是的,有一个物理内存问题有什么可以通过增加mapreduce.reduce.memory.mb来解决,但我不明白为什么它发生。

进入管道的数据越多,出现此内存问题的可能性就越大。事情是我的大多数还原器(大约90%)都通过了,因为数据应该已经写入磁盘了,所以应该释放内存作为还原器。

我在这里错过了什么?

回答

0

在YARN默认情况下,容器预先分配有内存。在这种情况下,无论跨集群的可用内存如何,所有reducer容器都将拥有6 GB内存。这些容器的JVM不会在容器中重复使用或共享(至少在Hadoop2中不是这样),这意味着如果一个reducer上的内存超出了它的内存6 GB限制,它将不会从其他空闲容器中获取资源(if这是你的关注)

现在,为什么只有少数reducer总是超过其内存(给定90%通过)暗示数据中可能出现SKEW,这意味着这个reducer可能会处理更多的输入组或更多的键。

+0

感谢您的解释。我发现错误...减速器的输出创建了太多文件,并且可能有处理所有这些文件的内存过载。我不完全明白为什么我不能有多个文件来响应reducer,但也许它与shuffle步骤有关。 – refaelos