天天看點

019_Map Task數目的确定和Reduce Task數目的指定

注意标題:Map Task數目的确定和Reduce Task數目的指定————自然得到結論,前者是後者決定的,後者是人為指定的。檢視源碼可以很容易看懂

1、MapReduce作業中Map Task數目的确定:  

1)MapReduce從HDFS中分割讀取Split檔案,通過Inputformat交給Mapper來處理。Split是MapReduce中最小的計算單元,一個Split檔案對應一個Map Task

2)預設情況下HDFS種的一個block,對應一個Split。

3)當執行Wordcount時:

   (1)一個輸入檔案小雨64MB,預設情況下則儲存在hdfs上的一個block中,對應一個Split檔案,是以将産生一個Map Task。

   (2)如果輸入一個檔案為150MB,預設情況下儲存在HDFS上的三個block中,對應三個Split檔案,是以将産生三個Map Task。

   (3)如果有輸入三個檔案都小于64MB,預設情況下會儲存在三個不同的block中,也将産生三個Map Task。

4)使用者可自行指定block與split的關系,HDSF中的一個block,一個Split也可以對應多個block。Split與block的關系都是一對多的關系。

5)總結MapReduce作業中的Map Task數目是由:

   (1)輸入檔案的個數與大小

   (2)hadoop設定split與block的關系來決定。

2、MapReduce作業中Reduce Task數目的指定:  

1)JobClient類中submitJobInternal方法中指定:int reduces=jobCopy.getNumReduceTasks();

2)而JobConf類中,public int getNumReduceTasks(){return geInt("mapred.reduce.tasks",1)}

是以,Reduce Task數目是由mapred.reduce.tasks指定,如果不指定則預設為1.

這就很好解釋了wordcount程式中的reduce數量為1的問題,這時候map階段的partition(分區)就為1了。

如有轉載請請務必保留此出處:http://www.cnblogs.com/xiangyangzhu/

上一篇: curl用法詳解
下一篇: 分子