2016-08-18 17 views
0

所以我試圖在AWS R3.4xLarge機器上運行一些hadoop作業。他們有16個核心和122千兆字節的RAM。當更多節點被使用時,hadoop沒有創建足夠的容器

我的每個映射器都需要大約8個RAM和一個線程,所以這些機器非常適合這項工作。

我已mapreduce.memory.mb設定爲8192, 和mapreduce.map.java.opts設置爲-Xmx6144 這將導致約14映射器(在實踐中接近12),每個機器上運行。

事實上,這對於2個從屬設置來說非常重要,其中調度程序顯示集羣的利用率爲90%。

然而,縮放到4個奴隸時,似乎hadoop根本沒有創建更多的映射器。實際上它創造了LESS。

在我的2奴隸設置,我有不到30個映射器在任何時間運行,我有大約20個四奴隸。這些機器坐在只有50%的利用率。

核心在那裏,物理內存在那裏。缺少什麼?爲什麼hadoop不創建更多的容器?

回答

0

因此,事實證明,無論你想出多大的難度,這都是無法理解的hadoop事情之一。

在yarn-default中存在一個名爲yarn.nodemanager.heartbeat.interval-ms的設置。 這設置爲1000.顯然,它控制以毫秒爲單位分配容器的最小時間間隔。

這意味着它只會每秒創建一個新的地圖任務。這意味着容器的數量受到我已經運行多少個容器*容器完成所花費的時間的限制。

通過將此值設置爲50或更好,1,我能夠從hadoop集羣中獲得預期的縮放比例。誠實應該被記錄得更好。

相關問題