Hadoop學習(四):資源調度管理系統YARN

YARN 簡介

YARN是Hadoop2.0引進的,前身是MapReduce本身的資源調度框架,Hadoop2.0後將MapReduce計算框架和YARN資源調度框架做了分離。

YARN 核心組件

在這裏插入圖片描述

  • Resources Manager
    是YARN主從架構下的master,是整個集羣資源的調度者和管理者。Client提交作業後,首先是向RM提交資源申請。RM負責給用戶提交的所有應用程序分配資源,它根據應用程序優先級、隊列容量、ACLs、數據位置等信息,做出決策,然後以共享的、安全的、多租戶的方式制定分配策略,調度集羣資源。
  • Node Manager
    YARN主從架構下的worker或slave,整個集羣資源的節點管理者。主要負責該節點內所有容器的生命週期的管理,監視資源和跟蹤節點健康。具體如下:
    1. 啓動時向 ResourceManager 註冊並定時發送心跳消息,等待 ResourceManager 的指令;
    2. 維護 Container 的生命週期,監控 Container 的資源使用情況;
    3. 管理任務運行時的相關依賴,根據 ApplicationMaster 的需要,在啓動 Container 之前將需要的程序及其依賴拷貝到本地。
  • APPlication Master
    在用戶提交一個應用程序時,YARN 會啓動一個輕量級的進程 ApplicationMaster。ApplicationMaster 負責協調來自 ResourceManager 的資源,並通過 NodeManager 監視容器內資源的使用情況,同時還負責任務的監控與容錯。具體如下:
    1. 根據應用的運行狀態來決定動態計算資源需求;
    2. 向 ResourceManager 申請資源,監控申請的資源的使用情況;
    3. 跟蹤任務狀態和進度,報告資源的使用情況和應用的進度信息;
    4. 負責任務的容錯。
  • Container
    Container 是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。當 AM 向 RM 申請資源時,RM 爲 AM 返回的資源是用 Container 表示的。YARN 會爲每個任務分配一個 Container,該任務只能使用該 Container 中描述的資源。ApplicationMaster 可在 Container 內運行任何類型的任務。例如,MapReduce ApplicationMaster 請求一個容器來啓動 map 或 reduce 任務,而 Giraph ApplicationMaster 請求一個容器來運行 Giraph 任務。

YARN工作原理簡述

  1. Client 提交作業到 YARN 上;

  2. Resource Manager 選擇一個 Node Manager,啓動一個 Container 並運行 Application Master 實例;

  3. Application Master 根據實際需要向 Resource Manager 請求更多的 Container 資源(如果作業很小, 應用管理器會選擇在其自己的 JVM 中運行任務);

  4. Application Master 通過獲取到的 Container 資源執行分佈式計算。

流程

  1. MR向yarn提交任務
  2. yarn開啓空閒nodeManager的App mstr
  3. App mstr計算任務所需的資源並反饋給RM
  4. RM向空閒的NM開啓Container分配資源
  5. NodeManager開始MR任務
  6. 反饋成果給app mstr並進一步反饋給RM
  7. RM釋放資源

在這裏插入圖片描述
YARN高可用利用了Zookeeper,具體看另外一篇文章的思路。
Hadoop學習(三):Zookeeper實現Hadoop集羣高可用
在這裏插入圖片描述

資源調度器

對於一個集羣來說,資源總是不夠用的,合理的資源調度是一個集羣保證高效運轉的前提。YARN內部有三種可供選擇的資源調度器,分別爲:

  • FIFO Scheduler
  • Capacity Scheduler
  • Fair Scheduler
  1. FIFO Scheduler
    和名稱一樣,就是根據任務的提交時間來調度,在一個繁忙的集羣中,FIFO Scheduler效果顯然不夠好。例如,大任務先於小任務提交,大任務顯然要比小任務耗時時間長,所以採用這種方式調度時會造成小任務遲遲得不到結果。
    對於繁忙的集羣,應該選擇Capacity Scheduler或Fair Scheduler。
  2. Capacity Scheduler
    容量調度器允許多個組織共享Hadoop集羣,每個組織可以分配到全部集羣資源的一部分。可以配置多個隊列,隊列內部還允許配置隊列,在隊列內部採用的FIFO調度。
    如果隊列中有多個任務使用的資源超過了該隊列的容量,當集羣資源還有剩餘的時候,這些任務是可以分配到隊列外的資源的;如果隊列設置了最大容量限制,那麼就無法使用了。
    YARN默認使用容量調度器(一些開源項目默認使用公平調度器)
  3. Fair Scheduler
    公平調度器儘可能達到任務之間的公平。當有一個作業進來時,調度器先爲他分配隊列中所有資源;當第二個任務過來時,該任務在一段時間後將獲得一半資源,另外一半由另外一個任務所使用(等一段時間是因爲task要先完成後釋放containers)。公平調度器還可以搶佔那些佔用超過了公平共享份額的任務,但是會降低整個集羣的效率。
    資源調度器的更多介紹請看Hadoop權威指南第四版P85。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章