Hadoop之YARN學習總結之架構

一、yarn產生背景

        YARN是Hadoop 2.0中的資源管理系統,它的基本設計思想是將MRv1中的JobTracker拆分成了兩個獨立的服務:一個全局的資源管理器ResourceManager和每個應用程序特有的ApplicationMaster。其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用程序的管理。

       YARN總體上仍然是master/slave結構,在整個資源管理框架中,resourcemanager爲master,nodemanager是slave。Resourcemanager負責對各個nademanger上資源進行統一管理和調度。當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManger啓動可以佔用一定資源的任務。由於不同的ApplicationMaster被分佈到不同的節點上,因此它們之間不會相互影響。

     YARN的基本組成結構,YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個組件構成。

      ResourceManager是Master上一個獨立運行的進程,負責集羣統一的資源管理、調度、分配等等;NodeManager是Slave上一個獨立運行的進程,負責上報節點的狀態;App Master和Container是運行在Slave上的組件,Container是yarn中分配資源的一個單位,包涵內存、CPU等等資源,yarn以Container爲單位分配資源。

       Client向ResourceManager提交的每一個應用程序都必須有一個Application Master,它經過ResourceManager分配資源後,運行於某一個Slave節點的Container中,具體做事情的Task,同樣也運行與某一個Slave節點的Container中。RM,NM,AM乃至普通的Container之間的通信,都是用RPC機制。

     YARN的架構設計使其越來越像是一個雲操作系統,數據處理操作系統。

1) 源於MRv1的缺陷:擴展性受限、單點故障、難以支持MR之外的計算框架;

2) 多計算框架各自爲戰,數據共享困難,資源利用率低;

  MR: 離線計算框架
  Storm:實時計算框架
  Spark:內存計算框架

催生了YARN的產生

二、yarn架構

1、ResourceManager:RM

    RM是一個全局的資源管理器,集羣只有一個(通常生產上會做高可用,有一主一備兩個RM),負責整個系統的資源管理和分配,包括處理客戶端請求、啓動/監控ApplicationMaster、監控nodemanager、資源的分配與調度。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。

2、NodeManager:NM

    整個集羣中有多個,負責自己本身節點的資源管理和使用

    定時向RM彙報本身節點的資源使用情況

    接收並處理來自RM的各種命令:例如啓動Container。Nodemanager管理着抽象容器,這些抽象容器代表着一些特定程序使用針對每個節點的資源。Nodemanager定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態(cpu和內存等資源)

    處理來自AM的命令

    單個節點的資源管理

3、ApplicationMaster:AM

   管理YARN內運行的應用程序的每個實例。

   每個應用程序對應一個:例如MR、Spark;負責應用程序的管理,爲應用程序向RM申請資源(如core,memory 等)分配給task

   需要跟NM通信:啓動/停止task。Task和AM都是運行在container裏面。

4、Container

    Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是用Container表示的。YARN會爲每個任務分配一個Container,且該任務只能使用該Container中描述的資源。它是一個動態資源劃分單位,是根據應用程序的需求動態生成的。

三、YARN的執行流程:

1、用戶向YARN中提交應用程序,其中包括ApplicationMaster(AM)程序,啓動AM的命令,用戶程序等。
2、ResourceManger(RM)爲該程序分配第一個Container,並與對應的NodeManger通訊,要求它在這個Container
中啓動應用程序AM。
3、AM首先向RM註冊,這樣用戶可以直接通過RM查看應用程序的運行狀態,然後將爲各個任務申請資源,並監控
它的運行狀態,直到運行結束,重複4--7的步驟。
4、AM採用輪詢的方式通過RPC協議向RM申請和領取資源。
5、一旦AM申請到資源後,便與對應的NM通訊,要求它啓動任務。
6、NM爲任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啓動命令寫到一個腳本中,並通過
運行該腳本啓動任務。
7、各個任務通過某個RPC協議向AM彙報自己的狀態和進度,以讓AM隨時掌握各個任務的運行狀態,從而可以在任務
失敗的時候重新啓動任務。
8、應用程序運行完成後,AM向RM註銷並關閉自己。

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