2015-09-30 79 views
1

我是hadoop和map縮小模型的新手,並試圖讓概念正確。mapreduce輸入分割數量和mapper數量之間的關係hadoop

我首先想要了解輸入分割的概念和映射器的數量是否正確。

我正在運行mapreduce wordcount程序,以下是我的問題。

1)如何確定輸入分割? 我在2個不同大小的輸入的同一集羣上運行相同的程序。

file 1 : size 48mb. => i got number of splits:1 in log. 
file 2: size 126mb => number of splits : 1 
file 2 : size 126mb (executed in eclipse IDE) => number of splits: 4 

不應該是126 MB文件的分割數等於2嗎?因爲我已經讀過,塊的大小是64 MB。所以它必須創建2個分割。

2)如何確定mappers的數量?我試圖通過以下行來獲取mappers的數量以瞭解mapreduce的工作流程。

conf.get("mapred.map.tasks") 

它每次返回2。

3)分割數量和映射器數量之間是否有任何關係?

4)做以上事情取決於集羣?僞分佈式和其他集羣還是不同?

謝謝。

回答

8

在MapReduce InputFormat類負責提供拆分信息。輸入拆分是進入一個映射任務的數據量。

  1. 從Hadoop 2.4的默認塊大小是128MB,因此您看到1 126MB文件拆分。
  2. 映射器的數量由輸入路徑的分割數量決定,假定如果您正在處理一個具有10個文件的目錄並且每個文件由10個分割組成,那麼您的工作將需要100個映射器來處理數據。
  3. 是的,就像我在大多數情況下所說的number of splits = number of mappers除非Hadoop知道如何計算拆分。例如在Gzip等壓縮文件格式的情況下,在這種情況下不可拆分number of files = number of mappers
  4. 不,對於僞和集羣模式它是相同的。

的更多信息:

  1. Default split size and changing split size
  2. How are splits calculated
  3. Record splits across block boundaries
相關問題