Hadoop2.0之YARN


YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中負責資源管理和調度以及監控運行在它上面的各種應用,是hadoop2.0中的核心,它類似於一個分布式操作系統,通過它的api編寫的應用可以跑在它上面,支持臨時和常駐的應用,集群的資源可以得到最大限度的共享。資源是指CPU,內存,硬盤,帶寬等可以量化的東西。

Hadoop1.0和2.0架構對比

  • 1.0的絕對核心是mapreduce,只能跑mapreduce的任務;2.0的絕對核心是YARN,除了可以跑mapreduce,還可以跑其它各種各樣的任務,每個應用向YARN申請資源
  • 1.0的JobTracker和NameNode是單點,一旦掛掉,整個集群會癱瘓;2.0核心組件不再是單點,基於ZooKeeper實現了HA(RM Hadoop2.4版本及后才支持)
  • 2.0沒有了JobTracker和TaskTracker,增加了ResourceManager,NodeManager,Application Master,Container
  • 2.0資源使用效率更高,資源使用更加彈性靈活
  • 2.0把資源管理以及調度和任務管理以及調度拆開,使得組件功能變得更簡單,程序更加穩定健壯,1.0時都由JobTracker負責
  • 2.0比1.0架構更加復雜了
  • YARN的出現解決了1.0時代設計的缺陷,讓Hadoop集群功能越來越完善,讓Hadoop集群越來越穩定

YARN架構設計


(圖片來源:hadoop官方文檔)

  • Client客戶端,提交任務到ResourceManager
  • ResourceManager(RM),負責接收任務,管理集群中的資源和調度,以及監控運行在YARN上的應用,它有2個核心的組件:1 可插拔的Scheduler資源調度器,2 ResoucerManagerApplicationMaster管理和監控應用
  • NodeManager(NM),負責管理單台機器的資源,通過心跳定時上報機器資源狀態,啟動和停止和監控Container,定時檢查機器可用情況
  • ApplicationMaster(AM),運行在NM Container上的程序,由RM選擇某台NM上的某個Container來運行這個程序,AM負責向RM申請應用所需資源,協調NM啟動Container,負責應用任務的管理和調度,通過心跳定時向RM上報任務執行情況
  • Container,資源容器,不限定應用類型,可以跑任何任務,比如map任務,reduce任務,spark driver任務等,資源類型有:CPU,內存,硬盤,帶寬等可量化的東西或者它們的組合。資源需要按照最小單位的倍數申請。
  • 執行流程概述;
    1 客戶端准備好任務各種資源,包括代碼,依賴包,配置文件等,通過RM客戶端向RM提交任務
    2 RM進行權限檢查和集群負載情況,如果通過,接受提交的任務,加入任務隊列,等待調度器調度
    3 當有空閑資源時,RM選擇一個NM,指示NM啟動一個Container運行這個任務的AM
    4 這個應用的AM啟動后,AM看看自己完成任務需要多少資源,然后向RM Scheduler申請資源
    5 Scheduler根據策略分配資源,返回資源信息給AM
    6 AM拿到已分配的資源信息后,協商NM啟動Container,然后在Container運行自己的任務程序
    7 AM調度自己的任務,監控自己的任務狀態(Container和AM通信),並定時向RM匯報任務狀態
    8 AM執行完成,釋放Container資源
  • RM出現異常;其它備份的RM接管,新的RM通知AM重新啟動
  • NM出現異常:RM監控到NM異常,RM通知AM,AM做進一步處理
  • AM出現異常:RM負責重新啟動AM,RM已經記錄了AM任務狀態信息,已經完成的任務不會再執行

RM實現HA


(圖片來源:hadoop官方文檔)

  • 大於等於2.4版本才支持HA
  • RM有2種狀態,提供服務的處於Active狀態,備份的是Standby狀態
  • 通過ZooKeeper協調,實現故障轉移
  • RM有內置ZKFC,只需開啟配置,不需要單獨啟動額外的監控進程
  • RM狀態信息存儲方式:
    1 ZooKeeper
    2 HDFS
    3 本地文件系統,故障轉移需要考慮信息如何同步,人工實現故障轉移

調度策略

  • FIFO Scheduler(先進先出)
    先來的先執行,如果有任務執行時間長,占用資源多,后面的任務只能等待,即使是執行快,占用資源少的應用,也必須等待那個耗時耗資源的任務執行完
  • Capacity Scheduler(預先分配資源模式)
    N個任務隊列,每個隊列分配一定資源,每個隊列資源互不共享,每個隊列只有有權限的人或者組織才能使用。
    如果某些任務隊列沒有任務,會造成資源的浪費。相比FIFO模式,任務執行時間會變的更長,因為耗時耗資源的應用可用資源更少了。
  • Fair Scheduler(公平調度模式)
    先來的任務先執行,當有新的任務到來時,雖然上一個任務沒有執行完,上一個任務釋放的Container優先分配給這個新任務,當新任務執行完成時,釋放的資源再給上一個任務使用。
    這樣就能達到即不影響耗時的任務又能執行執行新任務的目的。在兼顧公平使用的基礎上,最大化利用集群的資源。

參考資料

【0】八斗學院內部YARN學習資料
【1】YARN官方文檔
http://hadoop.apache.org/docs/r2.6.5/hadoop-yarn/hadoop-yarn-site/YARN.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM