大數據集羣管家--MapReduce運行架構, Yarn資源調度流程

前言


  某天, 某研究機構設計了一款私人飛機圖紙, 之後某公司根據該圖紙製作出一架私人飛機. 然後某位有錢人士覺得這架飛機非常好, 就花高價錢買下這架飛機. 飛機要想起飛, 需要向空管局申請航線, 申請成功後, 這位富人又僱傭了一位飛行員. 最後飛行員開啓飛機, 這位富人如願坐上心儀的飛機並翱翔天際.

  上述流程可以概括爲:
設計圖紙 --> 私人飛機 --> 空管局(申請航線) --> 僱傭飛行員(駕駛飛機) --> 開啓飛機(翱翔天際).

  看完上述實例, 再來看某個MapReduce應用的運行流程:

  06年, MapReduce這一計算框架納入Hadoop項目, 逐漸進入人們的眼簾. 一時間各大公司, 開發人員等都在學習使用MapReduce.
  某一天, 你基於MapReduce的原理開發了一個Application(應用程序), 並將它放在服務器上運行. 運行開始後, App先向資源管理器申請資源, 資源申請成功後, App又去找任務調度器, 讓它安排一個可以調度App的任務. 最後task執行App, 完成分佈式計算.

  上述流程可以概括爲:
MapReduce框架 --> Application --> 資源調度器(申請資源) --> 任務調度器(執行App) --> 分佈式並行計算.

  既然程序的執行需要資源調度器和任務調度器, 那麼MapReduce在各個節點上又是怎麼運行的呢?
  在之前的文章Hadoop簡介中, 也曾提到過Hadoop兩大版本的組成是不一樣的, 不一樣的最大區別就在於MapReduce應用程序運行時資源和任務的調度上. 接下來, 來看這兩大版本是如何調度的.

Hadoop1.x版本


官方配圖:

在這裏插入圖片描述
在這裏插入圖片描述  

在Hadoop1.x版本, MR自帶資源調度器, 資源調度器都是主從架構, 第一幅圖中有兩個新角色: JobTracker和TaskTracker.

  上述三幅圖的流程與下圖相似:

MapReduce1.x資源調度

  再來分析這個流程圖, 不難看出:

JobTracker的壓力很大, 容易出現單點故障. JobTracker即是資源調度主節點又是任務調度主節點, 監控整個集羣的資源負載.

TaskTracker是從節點, 管理自身節點的資源, 同時和JobTracker保持心跳, 彙報資源獲取情況, 進而獲取task任務.

資源管理與計算調度強耦合, 其他框架難以加入集羣.
  JobTracker, TaskTracker(以下簡稱JTT)是MR自帶的, 如果想要在這個集羣上運行Spark, 需要手動實現一套JTT, 實現之後這個集羣就會有兩套JTT來管理整個集羣的資源.
  當MR程序申請到資源 (假設申請大量資源) 開始計算時, Spark實現的JTT並不知道MR的JTT已經申請資源, Spark的JTT仍然會認爲整個集羣的資源是足夠的, 當Spark的計算程序運行時, 也會去申請資源 (假設也申請大量資源) , 但此時集羣上已經沒有足夠的資源, 這就會導致資源搶奪的問題, 造成資源搶奪的原因是因爲資源隔離. 也就是說不同框架對資源不能全局掌控.

MR處理思想是計算像數據移動, 或者說計算移動數據不移動, 或者說是數據本地化. 而上述流程中, reduce計算的數據"over the network"通過網絡進行傳輸, 也就是說數據向計算移動, 這樣就存在大量網絡IO, 降低集羣的效率.

  而在Hadoop2.x版本中, 完全廢除了MR自帶的JTT, 引入一個新的資源管理工具 – Yarn, 下面來看Yarn是如何工作的.

Hadoop2.x版本


官方配圖:

Yarn資源調度圖
  在Hadoop2.x版本, Hadoop將自帶的資源調度器提取解耦形成一個獨立的資源調度器 – Yarn(Yet Another Resource Negotiator), Yarn資源調度器也是主從架構. 主節點是ResourceManager, 從節點是NodeManager.

Yarn資源調度流程:


  Yarn資源調度流程圖:

Yarn資源調度
  上述流程比較繁瑣, 分爲9步, 圖中可以分析出:

Yarn的核心思想將Hadoop1.x中JobTracker的資源管理和任務調度兩個功能分開,分別由ResourceManager和ApplicationMaster進程實現.
ResourceManager:負責整個集羣的資源管理和調度
ApplicationMaster:負責應用程序相關的事務,比如任務調度、任務監控和容錯等.
Yarn爲AppMstr提供容錯機制, 當AppMstr掛掉後, RM會在一臺資源充足的隨機節點上重新啓動一個AppMstr.
每一個MapReduce作業對應一個AppMstr
NodeManager: 管理單節點上的資源, 處理來自RM的命令, 與RM保持心跳, 處理來自ApplicationMaster的命令.
Container: NM節點上的資源抽象, 內存, CPU, 磁盤, 網絡等資源的封裝.
YARN的引入,使得多個計算框架可運行在一個集羣中. 每個應用程序對應一個ApplicationMaster. 目前可以運行在YARN上的計算框架有MapReduce、Spark、Storm等.

覺得寫的還好的,歡迎點贊+關注,支持一下小編

關注公衆號:Java架構師聯盟,每日更新技術好文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章