YARN

Hadoop內核 | YARN (資源管理系統)shell

YARN是什麼?網絡

√Hadoop2.0新增系統框架

√負責集羣的資源管理和調度oop

√使得多種計算框架能夠運行在一個集羣中設計

YARN的特色blog

√良好的擴展性、高可用性隊列

√對多種類型的應用程序進行統一管理和調度內存

√自帶了多種多用戶調度器,適合共享集羣環境ci

=================== ResourceManager(RM)===================資源

RM是一個全局的資源管理器,負責整個系統的資源管理和分配。

它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。

=================== ResourceManager-調度器 ===================

調度器根據容量、隊列等限制條件(如每一個隊列分配必定的資源,最多執行必定數量的做業等),將系統中的資源分配給各個正在運行的應用程序。

須要注意的是,該調度器是一個「純調度器」,它再也不從事任何與具體應用程序相關的工做,好比不負責監控或者跟蹤應用的執行狀態等,也不負責從新啓動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完成。

 

調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位用一個抽象概念「資源容器」(Resource Container,簡稱Container)表示,Container是一個動態資源分配單位,它將內存、CPU、磁盤、網絡等資源封裝在一塊兒,從而限定每一個任務使用的資源量。此外,該調度器是一個可插拔的組件,用戶可根據本身的須要設計新的調度器,YARN提供了多種直接可用的調度器,好比Fair Scheduler和Capacity Scheduler等。

 

=================== ResourceManager-應用程序管理器 ===================

應用程序管理器負責管理整個系統中全部應用程序,包括應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時從新啓動它等。

 

=================== ApplicationMaster(AM) ===================

用戶提交的每一個應用程序均包含1個AM,主要功能包括:

與RM調度器協商以獲取資源(用Container表示);

將獲得的任務進一步分配給內部的任務;

與NM通訊以啓動/中止任務;

監控全部任務運行狀態,並在任務運行失敗時從新爲任務申請資源以重啓任務

當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的實例程序distributedshell,它能夠申請必定數目的Container以並行運行一個Shell命令或者Shell腳本;另外一個是運行MapReduce應用程序的AM—MRAppMaster,咱們將在第8章對其進行介紹。此外,一些其餘的計算框架對應的AM正在開發中,好比Open MPI、Spark等。

NM是每一個節點上的資源和任務管理器,一方面,它會定時地向RM彙報本節點上的資源使用狀況和各個Container的運行狀態;另外一方面,它接收並處理來自AM的Container啓動/中止等各類請求。

=================== Container ===================

Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源即是用Container表示的。YARN會爲每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。

 

=================== YARN工做流程 ===================

當用戶向YARN中提交一個應用程序後,YARN將分兩個階段運行該應用程序:

第一個階段是啓動ApplicationMaster;

第二個階段是由ApplicationMaster建立應用程序,爲它申請資源,並監控它的整個運行過程,直到運行完成。

步驟1 用戶向YARN中提交應用程序,其中包括ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等。

步驟2 ResourceManager爲該應用程序分配第一個Container,並與對應的Node-Manager通訊,要求它在這個Container中啓動應用程序的ApplicationMaster。

步驟3 ApplicationMaster首先向ResourceManager註冊,這樣用戶能夠直接經過ResourceManager查看應用程序的運行狀態,而後它將爲各個任務申請資源,並監控它的運行狀態,直到運行結束,即重複步驟4~7。

步驟4 ApplicationMaster採用輪詢的方式經過RPC協議向ResourceManager申請和領取資源。

步驟5 一旦ApplicationMaster申請到資源後,便與對應的NodeManager通訊,要求它啓動任務。

步驟6 NodeManager爲任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啓動命令寫到一個腳本中,並經過運行該腳本啓動任務。

步驟7 各個任務經過某個RPC協議向ApplicationMaster彙報本身的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而能夠在任務失敗時從新啓動任務。    

 在應用程序運行過程當中,用戶可隨時經過RPC向ApplicationMaster查詢應用程序的當前運行狀態。

步驟8 應用程序運行完成後,ApplicationMaster向ResourceManager註銷並關閉本身。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息