YARN 架構

對Hadoop有過了解的都知道,Hadoop經歷過很長一段時間的版本號混亂和架構調整,YARN是Hadoop 2.0(或者早期的0.23.x)提出的資源管理、任務調度框架。解決了很多Hadoop 1.0(或者0.21.x、0.22.x)時代的痛點。

隨着發展,YARN不僅僅是Hadoop的資源調度框架,還成爲一個通用的資源調度管理器,可以將各種各樣的計算框架通過YARN管理起來,比如Strom、Spark等。

YARN的基本思想是將資源管理和作業調度/監控的功能分爲獨立的守護進程。分別是一個全局的 ResourceManager(RM) 和每個應用程序的 ApplicationMaster(AM)。應用程序可以是一個job作業或者一組job作業的有向無環圖(DAG)。

ResourceManager負責系統中的所有應用程序的資源分配。NodeManager負責每臺機器中容器代理、資源監控(cpu,內存,磁盤,網絡),並將這些情況報告給ResourceManager或Scheduler。

每個應用的ApplicationMaster是一個框架特定的庫,從ResourceManager協商資源,並與NodeManager共同執行監聽任務。

從結構上看,YARN是主/從架構,一個ResourceManager,多個NodeManager,共同構成了數據計算框架。

YARN架構

從上面的結構圖來看,YARN主要的組件包括ResourceManager、NodeManager、ApplicationMaster和Container。

1. ResourceManager(RM)

ResourceManager負責整個集羣的資源管理和分配,包括處理客戶端請求、啓動和監控ApplicationMaster、監控NodeManager、資源的分配和調度。

ResourceManager由兩個主要組件組成:Scheduler和ApplicationsManager(ASM)。

  • Scheduler:Scheduler根據容量、隊列等限制條件(每個隊列分配多少資源、最多執行多少個作業等),向運行的應用程序分配資源。Scheduler是一個單純的調度器,不負責監控功能或跟蹤應用程序狀態。另外,如果因爲應用程序錯誤或硬件故障任務失敗,它不保證重新啓動任務。這些都交給ApplicationMaster完成。

    資源分配單位用一個抽象概念“容器”(Container)表示,容器是一個動態資源分配單位,將諸如內存、cpu、磁盤、網絡等資源封裝在一起,從而限定每個任務使用的資源量

    Scheduler是一個可插拔組件,可以根據自己的需要重新定義。YARN提供了已經實現了多種Scheduler,比如CapacitySchedulerFairScheduler

  • ApplicationsManager:ApplicationsManager負責接收提交的作業,與第一個容器協商來執行應用程序對應的ApplicationMaster,並在容器失敗時重啓ApplicationMaster。每個應用程序對應的ApplicationMaster負責從Scheduler協商資源容器,並跟蹤應用程序狀態、監控執行進度。

2. NodeManager(NM)

NodeManager是YARN集羣中每個節點上資源和任務管理器,負責當前節點程序的運行、資源的管理和監控。

NodeManager定時向ResourceManager發送本節點資源使用情況、容器運行狀態等信息。同時,NodeManager需要執行ResourceManager和ApplicationMaster的命令。

3. ApplicationMaster(AM)

YARN運行的每個應用程序都會有一個ApplicationMaster。負責協調來自ResourceManager的資源,並通過NodeManager監控容器和資源使用(包括內存、CPU等)。

4. YARN工作流程

  1. 客戶端向ResourceManager提交應用程序,其中包括ApplicationMaster、啓動ApplicationMaster的命令、用戶程序等;
  2. ResourceManager爲該應用程序分配第一個Container,並與對應NodeManager通信,要求它在這個Container中啓動應用程序的ApplicationMaster;
  3. ApplicationMaster向ResourceManager註冊自己,啓動成功後與ResourceManager保持心跳;
  4. ApplicationMaster向ResourceManager申請資源;
  5. 申請資源成功後,由ApplicationMaster進行初始化,然後與NodeManager通信,要求NodeManager啓動Container。然後ApplicationMaster與NodeManager保持心跳,從而對NodeManager上運行的任務進行監控和管理;
  6. Container運行期間,向ApplicationMaster彙報自己的進度和狀態信息,以便ApplicationMaster掌握任務運行狀態,從而在任務失敗是可以重新啓動;
  7. 應用運行結束後,ApplicationMaster向ResourceManager註銷自己,允許其所屬的Container回收。

參考
1. Apache Hadoop YARN
2. INTRODUCING APACHE HADOOP YAR


個人主頁: http://www.howardliu.cn

個人博文: YARN架構

CSDN主頁: http://blog.csdn.net/liuxinghao

CSDN博文: YARN架構

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