1. 程式人生 > >yarn的原理及MR在yarn上的執行

yarn的原理及MR在yarn上的執行

1.1 YARN 基本架構

YARNHadoop 2.0中的資源管理系統,它的基本設計思想是將MRv1中的JobTracker拆分成了兩個獨立的服務:一個全域性的資源管理器ResourceManager和每個應用程式特有的ApplicationMaster

其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用程式的管理。

 

1.2 YARN基本組成結構

YARN總體上仍然是Master/Slave結構,在整個資源管理框架中ResourceManagerMasterNodeManager

SlaveResourceManager負責對各個NodeManager上的資源進行統一管理和排程。當用戶提交一個應用程式時,需要提供一個用以跟蹤和管理這個程式的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManger啟動可以佔用一定資源的任務。由於不同的ApplicationMaster被分佈到不同的節點上,因此它們之間不會相互影響。

YARN主要由ResourceManagerNodeManagerApplicationMaster(圖中給出了MapReduceMPI兩種計算框架的ApplicationMaster,分別為MR AppMstr

MPI AppMstr)和Container等幾個元件構成。

1.ResourceManagerRM

RM是一個全域性的資源管理器,負責整個系統的資源管理和分配。它主要由兩個元件構成:排程器(Scheduler)和應用程式管理器(Applications ManagerASM)。

1)排程器

排程器根據容量、佇列等限制條件(如每個佇列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在執行的應用程式。

需要注意的是,該排程器是一個純排程器,它不再從事任何與具體應用程式相關的工作,比如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或者硬體故障而產生的失敗任務,這些均交由應用程式相關的

ApplicationMaster完成。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位用一個抽象概念資源容器Resource Container,簡稱Container)表示,Container是一個動態資源分配單位,它將記憶體、CPU、磁碟、網路等資源封裝在一起,從而限定每個任務使用的資源量。此外,該排程器是一個可插拔的元件,使用者可根據自己的需要設計新的排程器,YARN提供了多種直接可用的排程器,比如Fair SchedulerCapacity Scheduler等。

2 應用程式管理器

應用程式管理器負責管理整個系統中所有應用程式,包括應用程式提交、與排程器協商資源以啟動ApplicationMaster監控ApplicationMaster執行狀態並在失敗時重新啟動它等

 

2. ApplicationMasterAM

使用者提交的每個應用程式均包含1AM,主要功能包括:

RM排程器協商以獲取資源(用Container表示);

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

NM通訊以啟動/停止任務;

監控所有任務執行狀態,並在任務執行失敗時重新為任務申請資源以重啟任務。

當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的例項程式distributedshell,它可以申請一定數目的Container以並行執行一個Shell命令或者Shell指令碼;另一個是執行MapReduce應用程式的AM—MRAppMaster,我們將在第8章對其進行介紹。此外,一些其他的計算框架對應的AM正在開發中,比如Open MPISpark等。

 

3. NodeManagerNM

NM是每個節點上的資源和工作管理員,一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container的執行狀態;另一方面,它接收並處理來自AMContainer啟動/停止等各種請求。

 

4. Container

ContainerYARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AMRM申請資源時,RMAM返回的資源便是用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。

需要注意的是,Container不同於MRv1中的slot,它是一個動態資源劃分單位,是根據應用程式的需求動態生成的。截至本書完成時,YARN僅支援CPU和記憶體兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。

 

1.3 YARN的執行流程

 

 

 

從圖中可以看出,流程主要分為兩階段:

第一個階段是啟動ApplicationMaster

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