2015-05-12 17 views
0

我想問。爲什麼如果我在mapreduce.map/reduce.memory.mb和mapreduce.map/reduce.java.opts中的mapred-site.xml上配置了比默認值更大的值,使我的作業變慢?爲什麼hadoop map任務上的更多內存會讓mapreduce作業變慢?

但是,如果我配置得太低,那麼我會得到任務失敗。我認爲在這種情況下,我在hadoop上的內存配置是沒有必要的...

你能給我一個解釋嗎?

+0

您是如何測量它的?有什麼區別? –

+0

我測量它與運行相同的應用程序,但具有不同的內存配置。定時器表示較大的內存緩慢的過程,你覺得呢? –

+0

我認爲我們錯過了一些細節,比如你測試了什麼算法,集羣中有多少個節點,映射器的數量等等。 – vefthym

回答

1

在您的環境中可能發生的情況是,將mapreduce.map/reduce.memory.mbmapreduce.map/reduce.java.opts配置的值增加到上限時,實際上會減少允許在每個節點中執行Map/Reduce任務的容器數量,因此最終導致緩慢整個工作時間。

如果你有2個節點,每個節點有25 GB的免費RAM,並說你配置爲4 GB,那麼你可能在每個節點上至少有6個容器,總共是12個。所以你會有機會並行運行12個mapper/reducer任務。

如果將mapreduce.map/reduce.memory.mb配置爲10 GB,則每個節點上只能容納2個容器,完全可以使用4個容器並行執行映射器/縮減器任務。因此,由於缺少空閒容器,映射器/縮減器任務將大部分依次運行,從而導致整個作業完成時間延遲。

您應該根據您的環境考慮可用資源以及Map/Reduce容器所需的資源數量來證明配置的approprite值。希望這是有道理的。

+0

@kenny,你是否能夠澄清這個問題? – sureshsiva

1

可以在地圖分配內存/減少基於兩個因素的每核心(vcores)各自的Datanode

  • 總數

    1. 可用內存你有容器。

    嘗試創建相當於您在每個被扣留的核心數量的容器數量。 (包括超線程) 例如,如果你有10個物理芯(20芯包括超線程)

    所以總數量的容器可以規劃是19(離開其他進程1芯)

    假定有「X」 GB的RAM中的每個數據節點,然後

    離開其他進程一些內存(假設ŸGB)(堆)一樣,一個Datanode,節點管理器,域服務器等

    現在可用內存紗X -Y = Z

    存儲器映射容器= Y /每個節點的容器數量 存儲器減少容器= Y /(2 *每個節點的容器數量)

  • 相關問題