MapReduce 簡介
MapReduce 是一種編程模型,是一種編程方法,是抽象的理論。
YARN 概念
YARN 是 Hadoop 2.0 版本以後的資源管理器,即 MapReduce 2.0,相比於 1.0 版本,架構中的各個模塊分工明確,在性能和穩定性上都有所提升。YARN 負責整個集羣資源的管理和調度,也就是說所有的 MapReduce 都需要通過它來進行調度,支持多種計算框架。
YARN 的幾個概念:
- ResourceManager
- ApplicationMaster
- NodeManager
1、ResourceManager
- 負責接受客戶端提交的 job,分配和調度資源
- 啓動 ApplicationMaster,判斷 job 所需資源
- 監控 ApplicationMaster,在其失敗的時候進行重啓
- 監控 NodeManager
2、ApplicationMaster
- 爲 MapReduce 類型的程序申請資源,並分配任務
- 負責相關數據的切分
- 監控任務的執行及容錯
3、NodeManager
- 管理單個節點的資源,向 ResourceManager 進行彙報
- 接收並處理來自 ResourceManager 的命令
- 接收並處理來自 ApplicationMaster 的命令
MapReduce 編程模型
- 場景:輸入一個大型文件,通過 split 將其分成多個文件分片
- Map:每個文件分片由單獨的機器進行處理,這就是 Map 方法
- Reduce:將各個機器的計算結果進行彙總,得到最終的結果,這就是 Reduce 方法
Map 任務處理
- 讀取輸入文件的內容,解析成鍵值對,把文件的每一行解析成鍵值對,每個鍵值對調用一次 map 函數;(Input)
- 寫自定義的邏輯,對輸入的鍵值對進行處理,轉換成新的鍵值對輸出;(Map)
- 對不同分區的數據,按照鍵(key)進行排序和分組,key 相同的值(value)放到一個集合中;(Sort -> Combine)
- 把輸出的鍵值對(此時只是中間結果)按照 key 的範圍進行分區處理;(Partition)
- 分組後的數據進行 reduce 處理。
Reduce 任務處理
- 對多個 map 任務的輸出,按照不同分區,通過網絡 copy 到不同的 reduce 節點;
- 對多個 map 任務的輸出進行合併和排序,自定義 reduce 函數的邏輯,對輸入的鍵(key)和值(value)進行處理,轉換成新的鍵值對輸出;(Reduce)
- 把 reduce 的輸出保存到文件中。(Output)
MapReduce 的整個工作流程可以歸結爲:
Input -> Map -> Sort -> Combine -> Partition -> Reduce -> Output
歡迎關注我的知乎專欄【數據池塘】,專注於分享機器學習、數據挖掘乾貨:https://zhuanlan.zhihu.com/datapool
⬇️ 微信公衆號 ⬇️