2017-04-19 28 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