MapReduce:
算法
1.是一個分佈式的計算模型,用於解決海量數據的計算問題。網絡
2.由兩部分組成,Map和Reduce分佈式
3.Map和Reduce的參數都是key,value的形式ide
MapReduce的執行過程:函數
1.Map任務處理:排序
1.1讀取HDFS中的文件做爲輸入,解析爲key,value對。對輸入文件的每一行,解析成key、value對。每個鍵值對調用一次map函數。(k1,v1);
it
1.2在複寫的map函數中,編寫處理邏輯,對輸入的key、valu對進行處理,轉換成新的key、value(k2,v2);
class
1.3對輸出的結果進行分區(key相同的放在一塊);
map
1.4對不一樣的分區的數據,按照key進行排序、分組。-----分組:相同的key的value放到一個集合中。
數據
1.5分組後的數據進行規約。----把大的數據變爲小的數據(可選步驟)(k2,v2)
2.Reduce任務處理:
2.1對多個map任務的輸出,按照不一樣的分區,經過網絡拷貝到不一樣的reduce節點上。
2.2對多個map任務的輸出進行合併,排序。寫reduce函數實現本身的邏輯,對輸入的k2,v2進行處理,轉換成新的key,value(k3,v3)
2.3把reduce的輸出保存到文件中。
-----------------------------規約:
job.setCombinerClass(MyReduce.class);//形參是自定義一的reduce類
1.爲何使用combiner:
Combiner發生在map端,對數據進行規約處理,數據量變小,網絡傳輸變少,傳輸到reduce的數據量變小,傳輸時間變短,做業的總體時間變短。
2.爲何Combiner不做爲mapreduce的標配
由於不是全部的算法都適合使用Combiner處理,如求平均數
3.Combiner自己已經執行了reduce操做,爲何在Reducer階段仍是要執行reduce操做
Combiner發生在map端,處理一個任務所接收的文件中的數據,不能跨map執行,只有reduce能夠接收多個map任務處理的數據