MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式編程語言裏借來的,還有從矢量編程語言裏借來的特性。它極大地方便了編程人員在不會分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定併發的Reduce(歸約)函數,用來保證全部映射的鍵值對中的每個共享相同的鍵組。算法
源於Google MapReduce論文(04年)。編程
MapReduce的核心是:分而治之,並行處理;以及其調度和處理數據的自動化。 網絡
Hadoop中MR的主要內容:併發
hadoop序列化writable接口,數據類型app
應用開發 (debug 單元測試)解決基本數據處理,做業調優編程語言
工做機制 做業提交流程,做業調度,shuffle與排序分佈式
MR類型 輸入輸出類型函數式編程
特性:二次排序(全排、部分排),join函數
壓縮算法oop
一、mr的數據處理單位是一個split,一個split對應一個map任務,處理時會有多個map任務同時運行;當map從HDFS上讀取一個split時,這裏會有「移動計算,不移動數據」的機制來減小網絡的數據傳輸,使得效率能最大化;
二、獲取到split時,默認會以TextInputFormat的格式讀入,文件中的字符位置的偏移量做爲 key,以及每一行的數據做爲 value;
三、以後則進入map函數中進行處理,這個階段能夠獲取須要的數據並加以處理,並以key value的形式寫出,做爲後面reduce函數的輸入;
四、map到reduce之間會有一個shuffle的過程,大體過程是把不一樣key利用partitioner分散到各個reduce節點上去;
五、在reduce上會先經過 比較排序(前面shuffl會有預排序) 進行文件的歸併,以後進入reduce函數,在每一個reduce函數中key是惟一的,對應的value則是一個 Iterable接口類型,經過Iterable能夠遍歷全部當前key對應的全部value;
六、以後在reduce中對數據進行處理後,利用OutputFormat對處理後的key value保存到HDFS上即完成了整個流程。
注:一個split的大小計算:max( minimumSize, min( maximumSize, blockSize ));
一般 blockSize 在 minimumSize和maximumSize之間,因此通常分片大小就是塊大小。
InputFormat —> Mapper —> Partitioner (HashPartitioner) —> Combiner —> Reducer —> OutputFormat
優勢: