Hadoop 的核心(2)—— MapReduce & YARN

MapReduce 簡介

MapReduce 是一種編程模型,是一種編程方法,是抽象的理論。

YARN 概念

YARN 是 Hadoop 2.0 版本以後的資源管理器,即 MapReduce 2.0,相比於 1.0 版本,架構中的各個模塊分工明確,在性能和穩定性上都有所提升。YARN 負責整個集羣資源的管理和調度,也就是說所有的 MapReduce 都需要通過它來進行調度,支持多種計算框架。

YARN 架構圖

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 任務處理

  1. 讀取輸入文件的內容,解析成鍵值對,把文件的每一行解析成鍵值對,每個鍵值對調用一次 map 函數;(Input)
  2. 寫自定義的邏輯,對輸入的鍵值對進行處理,轉換成新的鍵值對輸出;(Map)
  3. 對不同分區的數據,按照鍵(key)進行排序和分組,key 相同的值(value)放到一個集合中;(Sort -> Combine)
  4. 把輸出的鍵值對(此時只是中間結果)按照 key 的範圍進行分區處理;(Partition)
  5. 分組後的數據進行 reduce 處理。

Reduce 任務處理

  1. 對多個 map 任務的輸出,按照不同分區,通過網絡 copy 到不同的 reduce 節點;
  2. 對多個 map 任務的輸出進行合併和排序,自定義 reduce 函數的邏輯,對輸入的鍵(key)和值(value)進行處理,轉換成新的鍵值對輸出;(Reduce)
  3. 把 reduce 的輸出保存到文件中。(Output)

MapReduce 的整個工作流程可以歸結爲:

Input -> Map -> Sort -> Combine -> Partition -> Reduce -> Output

 

歡迎關注我的知乎專欄【數據池塘】,專注於分享機器學習、數據挖掘乾貨:https://zhuanlan.zhihu.com/datapool

 

⬇️ 微信公衆號 ⬇️

發佈了38 篇原創文章 · 獲贊 23 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章