MapReduce簡介
- MapReduce是一種分佈式計算模型,是Google提出的,主要用於搜索領域,解決海量數據的計算問題。
- MR有兩個階段組成:Map和Reduce,用戶只需實現map()和reduce()兩個函數,即可實現分佈式計算。
MapReduce執行流程
MapReduce原理
MapReduce的執行步驟:
1、Map任務處理
1.1 讀取HDFS中的文件。每一行解析成一個<k,v>。每一個鍵值對調用一次map函數。 <0,hello you> <10,hello me>
1.2 覆蓋map(),接收1.1產生的<k,v>,進行處理,轉換爲新的<k,v>輸出。 <hello,1> <you,1> <hello,1> <me,1>
1.3 對1.2輸出的<k,v>進行分區。默認分爲一個區。詳見《Partitioner》
1.4 對不同分區中的數據進行排序(按照k)、分組。分組指的是相同key的value放到一個集合中。 排序後:<hello,1> <hello,1> <me,1> <you,1> 分組後:<hello,{1,1}><me,{1}><you,{1}>
1.5 (可選)對分組後的數據進行歸約。詳見《Combiner》
2、Reduce任務處理
2.1 多個map任務的輸出,按照不同的分區,通過網絡copy到不同的reduce節點上。(shuffle)詳見《shuffle過程分析》
2.2 對多個map的輸出進行合併、排序。覆蓋reduce函數,接收的是分組後的數據,實現自己的業務邏輯, <hello,2> <me,1> <you,1>
處理後,產生新的<k,v>輸出。
2.3 對reduce輸出的<k,v>寫到HDFS中。