2012-10-15 55 views
1

對於mapreduce作業,我們需要指定輸入數據的分區(map進程數 - M)和reduce進程數(R)。 MapReduce papers就是他們經常設置的例子:有2 000名工人,M = 200 000,R = 5000的集羣。工人被標記爲地圖工或縮小工。我想知道這些工作人員是如何選擇的。如何選擇地圖和減少集羣中的工人?

這樣做是爲了選擇地圖工作者的固定數量和減少工人的固定數量嗎? (然後存儲在reduce-workers節點中的數據必須發送到映射 - 減少工作人員) 或者在集羣中的每個節點上運行映射階段,然後選擇任何節點數作爲減員? 還是以另一種方式完成?

感謝您的回答。

回答

1

Map-Worker(Mapper)的數量取決於輸入文件的Input-split數量。

so 例如:200輸入分割(它們是邏輯的)= 200映射器

如何選擇Mapper節點?
映射器是本地數據節點,如果它不可能,那麼數據傳輸到空閒節點,並且映射器在該節點 上被調用。

減速機的數量可以由用戶設置(Job.setNumberOfReducer(數字)),否則它也將按照Mapper中間輸出的分割數量。



其他問題的答案

Q1>so in one node can run for example 10 mappers in parallel at one time, or these mappers are processed sequentially? 

答案:順序(的最大數目(活性/運行)映射器=的DataNodes數)

Q2>how are chosen the nodes where are reducers invoked? 

答:

  • 中間鍵值存儲在本地文件系統中不在HDFS中,然後它正在複製(HDFS)到Reducer節點。
  • 單個映射器將數據提供給多個reducer。所以數據的局部性是不成問題的,因爲如果不是所有的節點,來自許多節點的數據都來自於特定的節點。

所以被(或至少應)選擇在節點上的帶寬減速機,在頭腦中保持所有上述各點

Q3>if we need reducers count bigger then overall nodes count (for example 90 reducers in 50 nodes cluster), are the reducers on one node processed in parallel or sequentially? 

答案:順序((活性/運行)減速器的最大數=數據節點數量)

+0

好的,所以在一個節點中可以同時運行10個映射器,或者這些映射器是按順序處理的?如果我們設置了減少器數量少於總體節點數量(例如50個節點羣集中的40個減少器),那麼如何選擇減法器調用的節點?它取決於中間輸出的局部性以實現最快的數據傳輸還是取決於其他任何東西?另一方面,如果我們需要減少器數量大於總體節點數(例如50個節點羣中的90個減少器),那麼並行或順序處理一個節點上的減速器? – babusek

+0

我已添加ans。 –

+0

非常感謝!你幫助了我,現在我明白了一切(我希望)。 – babusek