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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM