一:概述
1.1 ResourceManager基本職能
-
ResourceManager需通過兩個RPC協(xié)議與NodeManager和ApplicationMaster交互矫渔,具體如下:
- ResourceTracker:NodeManager通過該RPC協(xié)議向ResourceManager注冊狮荔、匯報節(jié)點健康狀況和Container運行狀態(tài),并領(lǐng)取ResourceManager下達(dá)的命令术羔,這些命令包括重新初始化挎挖、清理Container等,在該RPC協(xié)議中,NodeManager與ResourceManager之間采用了“pull模型”肄梨,NodeManager總是周期性地主動向ResourceManager發(fā)起請求,并通過心跳應(yīng)答領(lǐng)取下達(dá)給自己得命令
- ApplicationMasterProtocol:應(yīng)用程序的ApplicationMaster通過該RPC協(xié)議向ResourceManager注冊挠锥、申請資源和釋放資源
- ApplicationClientProtocol:應(yīng)用程序的客戶端通過該RPC協(xié)議向ResourceManager提交應(yīng)用程序众羡、查詢應(yīng)用程序狀態(tài)和控制應(yīng)用程序(比如殺死應(yīng)用程序和修改應(yīng)用程序優(yōu)先級)等
- ContainerManagementProtocol:ApplicationMaster通過該RPC協(xié)議要求NodeManager啟動、停止Container和獲得Containers的狀態(tài)
-
概括起來蓖租,ResourceManager主要完成以下幾個功能:
- 與客戶端交互粱侣,處理來自客戶端的請求
- 啟動和管理ApplicationMaster,并在它運行失敗時重新啟動它蓖宦;資源管理和調(diào)度齐婴,接收來自ApplicationMaster的資源申請請求,并為之分配資源
- 管理NodeManager稠茂,接收來自NodeManager的資源匯報信息柠偶,并向NodeManager下達(dá)管理指令(比如殺死Container等)
1.2 ResourceManager內(nèi)部架構(gòu)
- ResourceM主要由以下幾個部分組成
- 用戶交互模塊:ResourceManager分別針對普通用戶、管理員和Web提供了三種對外服務(wù)睬关,具體實現(xiàn)分別對應(yīng)ClientRMService诱担、AdminService和WebApp
- ClientRMService:ClientRMService是為普通用戶提供的服務(wù),它處理來自客戶端的各種RPC請求电爹,比如提交應(yīng)用程序蔫仙、終止應(yīng)用程序、獲取應(yīng)用程序狀態(tài)
- AdminService:ResourceManager為管理員提供了一套獨立的服務(wù)接口藐不,以防止大量普通用戶請求使管理員發(fā)送的管理命令餓死匀哄,管理員可通過這些接口管理集群秦效,比如動態(tài)更新節(jié)點列表、更新ACL列表涎嚼、更新隊列信息等
- WebApp:為了更加友好地展示集群資源使用情況和應(yīng)用程序運行狀態(tài)等信息阱州。YARN對外提供了一個Web界面
- NM管理模塊
- NMLivelineMonitor:監(jiān)控NM是否活著,如果一個NodeManager在一定時間(默認(rèn)為10min)未匯報心跳信息法梯,則認(rèn)為它死掉了苔货,需要將其從集群中移除
- NodesListManager:維護(hù)正常節(jié)點和異常節(jié)點列表,管理exclude(類似于黑名單)和include(類似于白名單)節(jié)點列表立哑,這兩個列表均是在配置文件中設(shè)置的夜惭,可以動態(tài)加載
- ResourceTrackerService:處理來自NodeManager的請求,主要包括注冊和心跳兩種铛绰,其中诈茧,注冊是NodeManager啟動時發(fā)生的行為,請求包中包含節(jié)點的ID捂掰、可用的資源上線等信息敢会;而心跳是周期性行為,包括各個Container運行狀態(tài)这嚣、運行的各個Application列表鸥昏、節(jié)點健康狀況(可通過一個腳本設(shè)置)等信息,作為請求的應(yīng)答姐帚,ResourceTrackerService可為NodeManager返回待釋放的Container列表吏垮、Application列表等信息
- AM管理模塊
- AMLivelinessMonitor:監(jiān)控AM是否活著,如果一個ApplicationMaster在一定時間(默認(rèn)為10min)內(nèi)未匯報心跳信息罐旗,則認(rèn)為它死掉了膳汪,它上面所有正在運行的Container將被置為失敗狀態(tài),而AM本身被重新分配到另外一個節(jié)點上(用戶可指定每個ApplicationMaster的嘗試次數(shù)尤莺,默認(rèn)是2)執(zhí)行
- ApplicationMasterLauncher:與某個NodeManager通信旅敷,要求它為某個應(yīng)用程序啟動ApplicationMaster
- ApplicationMasterService(AMS):處理來自ApplicationMaster的請求,主要包括注冊和心跳兩種請求颤霎,其中,注冊是ApplicationMaster啟動時發(fā)生的行為涂滴,注冊請求包中包含ApplicationMaster啟動節(jié)點友酱;對外的RPC端口號和tracking URL等信息;而心跳則是周期性行為柔纵,匯報信息包含所需資源描述缔杉、待釋放的Container列表、黑名單列表等搁料,而AMS則為之返回新分配的Container或详、失敗的Container系羞、待搶占的Container列表等信息
- Application管理模塊
- ApplicationACLsManager:管理應(yīng)用程序訪問權(quán)限,包含兩部分權(quán)限:查看權(quán)限和修改權(quán)限霸琴。查看權(quán)限主要用于查看應(yīng)用程序基本信息椒振,而修改權(quán)限則主要用于修改應(yīng)用程序優(yōu)先級、殺死應(yīng)用程序等
- RMAppManager:管理應(yīng)用程序的啟動和關(guān)閉
- ContainerAllocationExpirer:當(dāng)AM收到RM新分配的一個Container后梧乘,必須在一定時間(默認(rèn)為10min)內(nèi)在對應(yīng)的NM上啟動該Container澎迎,否則RM將強制回收該Container,而一個已經(jīng)分配的Container是否該被回收則是由ContainerAllocationExpirer決定和執(zhí)行的
- 狀態(tài)機(jī)管理模塊
- RMApp:RMApp維護(hù)了一個應(yīng)用程序(Application)的整個運行周期选调,包括從啟動到運行結(jié)束整個過程夹供。由于一個Application的生命周期可能會啟動多個Application運行實例(Application Attempt),因此可認(rèn)為仁堪,RMApp維護(hù)的是同一個Application啟動的所有實例的生命周期
- RMAppAttempt:一個應(yīng)用程序可能啟動多個實例哮洽,即一個實例運行失敗后,可能再次啟動一個重新運行弦聂,而每次啟動稱為一次運行嘗試(或者“運行實例”)鸟辅,用“RMAppAttempt”描述,RMAppAttempt維護(hù)了一次運行嘗試的整個生ing周期
- RMContainer:RMContainer維護(hù)了一個Container的運行周期横浑,包括從創(chuàng)建到運行結(jié)束整個過程剔桨。目前YARN尚不支持Container重用,一個Container用完后會立刻釋放徙融,將來可能會增加Container重用機(jī)制
- RMNode:RMNode維護(hù)了一個NodeManager的生命周期洒缀,包括啟動到運行結(jié)束整個過程
- 安全管理模塊:ResourceManager自帶了非常全面的權(quán)限管理機(jī)制
- 資源分配模塊:該模塊主要涉及一個組件——ResourceScheduler。ResourceScheduler是資源調(diào)度器欺冀,它按照一定的約束條件(比如隊列容量限制等)將集群中的資源分配給各個應(yīng)用程序树绩,當(dāng)前主要考慮內(nèi)存和CPU資源。ResourceScheduler是一個插拔式模塊隐轩,YARN自帶了一個批處理資源調(diào)度器——FIFO和兩個多用戶調(diào)度器——Fair Scheduler和Capacity Scheduler
- 用戶交互模塊:ResourceManager分別針對普通用戶、管理員和Web提供了三種對外服務(wù)睬关,具體實現(xiàn)分別對應(yīng)ClientRMService诱担、AdminService和WebApp
參考:《Hadoop 技術(shù)內(nèi)幕:深入解析 YARN 架構(gòu)設(shè)計與實現(xiàn)原理》