2015-06-19 114 views
0

我剛開始研究hadoop,並在經歷了一些掙扎之後讓wordcount示例在羣集(兩個datanode)上工作。hadoop - 地圖/減少功能

但我有一個關於Map/Reduce功能的問題。我在地圖上看到,輸入文件/數據被轉換成另一種形式的數據,可以在縮減步驟中進行高效處理。

假設我有四個輸入文件(input1.txt,input2.txt,input3.txt,input4.txt)並且想要讀取輸入文件並轉換爲另一種數據形式以減少。

所以這裏是問題。如果我在集羣環境(兩個datanode)上運行應用程序(wordcount),這四個輸入文件是在每個datanode上讀取還是在每個datanode上讀取兩個輸入文件?我該如何檢查哪個文件在哪個datanode上讀取?

還是映射(在每個datanode上)讀取文件作爲某種塊而不是讀取單個文件?

回答

0

請參閱hadoop基於塊而不是文件工作。因此,即使所有四個文件都小於128MB(或64MB,取決於塊大小),它們也只能由一個映射器讀取。這個由映射器讀取的塊也稱爲InputSplit。我希望能回答你的問題。

+0

這是否意味着如果塊大小較大(可能超過500MB),塊是由映射器(提交給兩個datanodes)讀取的? – user826323

0

文件被分成塊。塊散佈在羣集中的數據節點上。塊也被複制因子複製(默認爲3),因此每個塊可以位於多個節點上。調度程序決定在哪裏運行映射器,取決於哪個數據節點可用於處理以及數據位於何處(數據局部性進入畫面)。在你的程序(wordcount)中,每一行都被一個接一個地送到一個映射器(不是整個文件或塊)。