yarn的筆記
一、基本架構
YARN是Hadoop 2.0中的資源管理系統,它的基本設計思想是將MRv1中的JobTracker拆分成了兩個獨立的服務:一個全局的資源管理器ResourceManager和每個應用程序特有的ApplicationMaster。
其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用程序的管理。
二、 YARN基本組成結構
YARN總體上仍然是Master/Slave結構,在整個資源管理框架中,ResourceManager為Master,NodeManager為Slave,ResourceManager負責對各個NodeManager
圖2-9描述了YARN的基本組成結構,YARN主要由ResourceManager、NodeManager、ApplicationMaster(圖中給出了MapReduce和MPI兩種計算框架的ApplicationMaster
1.ResourceManager(RM)
RM是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。
(1)調度器
調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。
需要註意的是,該調度器是一個“純調度器”,它不再從事任何與具體應用程序相關的工作,比如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的
(2) 應用程序管理器
應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啟動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時重新啟動它等。
2. ApplicationMaster(AM)
用戶提交的每個應用程序均包含1個AM,主要功能包括:
與RM調度器協商以獲取資源(用Container表示);
將得到的任務進一步分配給內部的任務;
與NM通信以啟動/停止任務;
監控所有任務運行狀態,並在任務運行失敗時重新為任務申請資源以重啟任務。
當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的實例程序distributedshell,它可以申請一定數目的Container以並行運行一個Shell命令或者Shell腳本;另一個是運行MapReduce應用程序的AM—MRAppMaster,我們將在第8章對其進行介紹。此外,一些其他的計算框架對應的AM正在開發中,比如Open MPI、Spark等。
3. NodeManager(NM)
NM是每個節點上的資源和任務管理器,一方面,它會定時地向RM匯報本節點上的資源使用情況和各個Container的運行狀態;另一方面,它接收並處理來自AM的Container啟動/停止等各種請求。
4. Container
Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM為AM返回的資源便是用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。
需要註意的是,Container不同於MRv1中的slot,它是一個動態資源劃分單位,是根據應用程序的需求動態生成的。截至本書完成時,YARN僅支持CPU和內存兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。
三、 YARN工作流程
當用戶向YARN中提交一個應用程序後,YARN將分兩個階段運行該應用程序:
第一個階段是啟動ApplicationMaster;
第二個階段是由ApplicationMaster創建應用程序,為它申請資源,並監控它的整個運行過程,直到運行完成。
如圖2-11所示,YARN的工作流程分為以下幾個步驟:
步驟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註銷並關閉自己。
四、 多角度理解YARN
可將YARN看做一個雲操作系統,它負責為應用程序啟動ApplicationMaster(相當於主線程),然後再由ApplicationMaster負責數據切分、任務分配、啟動和監控等工作,而由ApplicationMaster啟動的各個Task(相當於子線程)僅負責自己的計算任務。當所有任務計算完成後,ApplicationMaster認為應用程序運行完成,然後退出。
五、通信協議:
YARN通信協議,RPC協議是連接各個組件的“大動脈”,了解不同組件之間的RPC協議有助於我們更深入地學習YARN框架。在YARN中,任何兩個需相互通信的組件之間僅有一個RPC協議,而對於任何一個RPC協議,通信雙方有一端是Client,另一端為Server,且Client總是主動連接Server的,因此,YARN實際上采用的是拉式(pull-based)通信模型。如圖2-10所示,箭頭指向的組件是RPC Server,而箭頭尾部的組件是RPC Client,YARN主要由以下幾個RPC協議組成:
JobClient(作業提交客戶端)與RM之間的協議—ApplicationClientProtocol:JobClient通過該RPC協議提交應用程序、查詢應用程序狀態等。
Admin(管理員)與RM之間的通信協議—ResourceManagerAdministrationProtocol:Admin通過該RPC協議更新系統配置文件,比如節點黑白名單、用戶隊列權限等。
AM與RM之間的協議—ApplicationMasterProtocol:AM通過該RPC協議向RM註冊和撤銷自己,並為各個任務申請資源。
AM與NM之間的協議—ContainerManagementProtocol:AM通過該RPC要求NM啟動或者停止Container,獲取各個Container的使用狀態等信息。
NM與RM之間的協議—ResourceTracker:NM通過該RPC協議向RM註冊,並定時發送心跳信息匯報當前節點的資源使用情況和Container運行情況。
Yarn的組件及協議詳解:http://blog.csdn.net/u011007180/article/details/52425368
yarn的筆記