一:MapReduce基礎html
Hadoop MapReduce是一個軟件框架,基於該框架可以容易地編寫應用程序,這些應用程序可以運行在由上千個商用機器組成的大集羣上,並以一種可靠的,具備容錯能力的方式並行地處理上TB級別的海量數據集。編程
1.軟件框架,2.並行處理,3.可靠且容錯,4.大規模集羣,5.海量數據集。網絡
所以,對於MapReduce能夠簡單地認爲,他是一個軟件框架,海量數據是它的「菜」,它在大規模集羣上以一種可靠且容錯的方式並行地「烹飪這道菜」。app
MapReduce能作什麼?簡單講能夠作大數據處理,即如何烹飪這道菜,好比數據加工、挖掘和數據分析等。負載均衡
MapReuce的思想就是「分而治之」。Mapper負責「分」, 即把複雜的任務分解爲若干個「簡單的任務」來處理。「簡單的任務」包含三層含義:一是數據或計算的規模相對原任務要大大縮小;二是就近計算原則,即任務會分配到存放着所需數據的節點上進行計算;三是這些小任務能夠並行計算,彼此間幾乎沒有依賴關係。Reducer負責對map階段的結果進行彙總。至於須要多少個Reducer,用戶能夠根據具體問題,經過在mapred-site.xml配置文件裏設置參數mapred.reduce.tasks的值,缺省值爲1。框架
MapReduce的思想就是「分而治之」。Mapper負責「分」,即把複雜的任務分解爲若干個「簡單的任務」來處理。「簡單的任務」包含三層含義:一是數據或計算的規模相對原任務要大大縮小;二是就近計算原則,即任務會分配到存放着所需數據的節點上進行計算;三是這些小任務能夠並行計算,彼此間幾乎沒有依賴關係。Reducer負責對map階段的結果進行彙總。至於須要多少個Reducer,用戶能夠根據具體問題,經過在mapred-site.xml配置文件裏設置參數mapred.reduce.tasks的值,缺省值爲1。分佈式
愛上函數
Mapreduce大規模數據集的操做,分發給一個主節點管理下的各分節點共同完成,而後經過整合各分節點的中間結果,獲得最終的結果。簡單地說,MapReduce就是「任務的分解與結果的彙總」。上述處理過程被MapReduce高度的抽象爲兩個函數:map和reduce,map負責把任務分解成多個任務,reduce負責把分解後多任務處理的結果彙總起來。至於在並行編程中的其餘種種複雜問題,如分佈式存儲,工做調度,負載均衡,容錯處理,網絡通訊等,均由MapReduce框架負責處理。oop
用MapReduce來處理的數據集(或任務)必須具有這樣的特色:大數據
待處理的數據集能夠分解成許多小的數據集,並且每個小數據集均可以徹底並行的進行處理。
① 將任務的輸入數據分割成固定大小的片斷split。
② 將每一個split進一步分解成一批鍵值對<k1,v1>。
③ hadoop爲每個split建立一個Map任務,並將對應的split中的<k1,v1>對做爲輸入 。
④ 獲得計算的中間結果<k2,v2>,接着講中間結果按照k2進行排序,並將key值相同的value放在一塊兒造成一個新列表,造成<k2,list(v2)>元組。最後在根據key值的範圍將這些元組進行分組,對應不一樣的Reduce任務。
⑤ reduce把熊不一樣mapper接收來的數據整合在一塊兒並進行排序,而後用reduce函數對輸入的元組進行處理,獲得鍵值對<k3,v3>.
⑥ 將最後獲得的結果<k3,v3 >對輸出到HDFS上,
更多內容詳解-MapReduce框架:http://www.cnblogs.com/sharpxiajun/p/3151395.html。