MapReduce 入門與實戰
阿新 • • 發佈:2020-08-06
- MapReduce的思想核心是“分而治之”
Map負責“分”,即把複雜的任務分解為若干個“簡單的任務”來並行處理。可以進行拆分的前提是這些小任務可以平行計算,彼此間幾乎沒有依賴關係。
Reduce負責“合”,即對map階段的結果進行全域性彙總。
MapReduce執行在yarn叢集
- ResourceManager
- NodeManager
Map和Reduce為程式設計師提供了一個清晰的操作介面抽象描述。MapReduce中定義瞭如下的Map和Reduce兩個抽象的程式設計介面,由使用者去程式設計實現.Map和Reduce,MapReduce處理的資料型別是<key,value>鍵值對。
Map: (k1; v1) → [(k2; v2)]
Reduce: (k2; [v2]) → [(k3; v3)]
- MapReduce 程式設計規範
MapReduce 的開發一共有八個步驟, 其中 Map 階段分為 2 個步驟,Shuffle階段4個步驟,Reduce階段分為2個步驟
Map 階段 2 個步驟
- 設定 InputFormat 類, 將資料切分為 Key-Value(K1和V1) 對, 輸入到第二步
- 自定義 Map 邏輯, 將第一步的結果轉換成另外的 Key-Value(K2和V2) 對, 輸出結果
Shuffe 階段 4 個步驟
- 對輸出的 Key-Value 對進行分割槽
- 對不同分割槽的資料按照相同的 Key 排序
- (可選) 對分組過的資料初步規約, 降低資料的網路拷貝
- 對資料進行分組, 相同 Key 的 Value 放入一個集合中
Reduce 階段 2 個步驟
- 對多個 Map 任務的結果進行排序以及合併, 編寫 Reduce 函式實現自己的邏輯, 對輸入的 Key-Value 進行處理, 轉為新的 Key-Value(K3和V3)輸出
- 設定 OutputFormat 處理並儲存 Reduce 輸出的 Key-Value 資料