1. ResourceManager(RM)
RM是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。
調度器 調 度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。需要注意的是,該 調度器是一個“純調度器”,它不再從事任何與具體應用程序相關的工作,比如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或者硬件 故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完成。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配 單位用一個抽象概念“資源容器”(Resource Container,簡稱Container)表示,Container是一個動態資源分配單位,它將內存、CPU、磁盤、網絡等資源封裝在一起,從而限 定每個任務使用的資源量。此外,該調度器是一個可插拔的組件,用戶可根據自己的需要設計新的調度器,YARN提供了多種直接可用的調度器,比如Fair Scheduler和Capacity Scheduler等。
應用程序管理器 應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啟動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時重新啟動它等。
2. ApplicationMaster(AM)
用戶提交的每個應用程序均包含一個AM,主要功能包括:
與RM調度器協商以獲取資源(用Container表示);
將得到的任務進一步分配給內部的任務(資源的二次分配);
與NM通信以啟動/停止任務;
監控所有任務運行狀態,並在任務運行失敗時重新為任務申請資源以重啟任務。
當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的實例程序distributedshell,它可以申請一定數目的Container以並 行運行一個Shell命令或者Shell腳本;另一個是運行MapReduce應用程序的AM—MRAppMaster。
注:RM只負責監控AM,在AM運行失敗時候啟動它,RM並不負責AM內部任務的容錯,這由AM來完成。
3. NodeManager(NM)
NM是每個節點上的資源和任務管理器,一方面,它會定時地向RM匯報本節點上的資源使用情況和各個Container的運行狀態;另一方面,它接收並處理來自AM的Container啟動/停止等各種請求。
4. Container
Container 是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM為AM返回的資源便是用 Container表示。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。
注:1. Container不同於MRv1中的slot,它是一個動態資源划分單位,是根據應用程序的需求動態生成的。
2. 現在YARN僅支持CPU和內存兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。
YARN的資源管理和執行框架都是按主/從范例實現的——Slave ---節點管理器(NM)運行、監控每個節點,並向集群的Master---資源管理器(RM)報告資源的可用性狀態,資源管理器最終為系統里所有應用分配資源。
特定應用的執行由ApplicationMaster控制,ApplicationMaster負責將一個應用分割成多個任務,並和資源管理器協調執行所需的資源,資源一旦分配好,ApplicationMaster就和節點管理器一起安排、執行、監控獨立的應用任務。
需要說明的是, YARN不同服務組件的通信方式采用了事件驅動的異步並發機制,這樣可以簡化系統的設計。