【Hadoop】ResourceManager簡(jiǎn)介
簡(jiǎn)介
ResourceManager(RM),RM是全局的資源管理器,負責整個(gè)系統的資源管理和分配。主要由以下兩部分組成:
- 調度器:根據容量、隊列限制條件將系統資源分配給各個(gè)應用。
- 資源分配的單位是container,container是一個(gè)動(dòng)態(tài)資源單位,它將內存、CPU、磁盤(pán)、網(wǎng)絡(luò )等資源封裝在一起,從而限定了資源使用量。
- 調度器是一個(gè)可插拔的組件,用戶(hù)可以自己定制,也可以選擇Fair或Capacity調度器.
- 應用程序管理器:負責管理所有應用程序的以下內容:
- 應用提交
- 與調度器協(xié)商資源以啟動(dòng)AM.
- 監控AM運行狀態(tài)并在失敗時(shí)重啟它
RM內部架構
- 交互模塊:RM對普通用戶(hù)、管理員、Web提供了三種對外服務(wù):
- ClientRMService:為普通用戶(hù)提供服務(wù),它處理來(lái)自客戶(hù)端的各種RPC,比如:
- 應用提交
- 終止應用
- 獲取應用狀態(tài)等
- AdminService:為管理員提供的獨立接口,主要目的是為了防止大量普通用戶(hù)請求阻塞管理員通道,提供如下功能:
- 動(dòng)態(tài)更新節點(diǎn)列表
- 更新ACL列表
- 更新隊列信息等
- WebApp:提供一個(gè)Web界面來(lái)讓用戶(hù)更友好的獲知集群和應用的狀態(tài)
- ClientRMService:為普通用戶(hù)提供服務(wù),它處理來(lái)自客戶(hù)端的各種RPC,比如:
- NM管理模塊:用來(lái)管理NM的模塊,主要包含以下三個(gè)組件:
- ResourceTrackerService:處理來(lái)自NodeManager的請求,主要包括:
- 注冊:注冊是NM啟動(dòng)時(shí)發(fā)生的行為,NM提供的信息包括:
- 節點(diǎn)ID、可用資源上限信息等.
- 心跳:心跳是周期行為
- NM提供的信息包括:
- 各個(gè)Container運行狀態(tài)、運行的Application列表、節點(diǎn)健康狀態(tài)等.
- RM返回的信息包括:
- 等待釋放的Container列表、Application列表等.
- NM提供的信息包括:
- 注冊:注冊是NM啟動(dòng)時(shí)發(fā)生的行為,NM提供的信息包括:
- NMLivelinessMonitor:監控NM是否活著(zhù),如果NM在一定時(shí)間(默認10m)內未上報心跳,則認為它死掉,需要移除.
- NodesListManager:維護正常節點(diǎn)和異常節點(diǎn)列表,管理exclude(類(lèi)似黑名單)和include(類(lèi)似白名單)節點(diǎn)列表,
這兩個(gè)列表均是在配置文件中設置的,可以動(dòng)態(tài)加載。
- ResourceTrackerService:處理來(lái)自NodeManager的請求,主要包括:
- AM管理模塊:主要是用來(lái)管理所有AM,主要包括:
- ApplicationMasterService(AMS):處理來(lái)自AM的請求,包括:
- 注冊:是AM啟動(dòng)時(shí)發(fā)生的行為,信息包括:
- AM的啟動(dòng)節點(diǎn)、對外RPC端口、tracking URL等.
- 心跳:是周期行為
- AM提供的信息包括:所需資源的描述、待釋放Container列表、黑名單列表等.
- AMS返回的信息包括:新分配的Container、失敗的Container、待搶占的Container列表等
- 注冊:是AM啟動(dòng)時(shí)發(fā)生的行為,信息包括:
- AMLivelinessMonitor:監控AM是否活著(zhù),如果AM在一定時(shí)間(默認10m)內未上報心路,
則認為它死掉,它上面正在運行的Container將會(huì )被置為失敗狀態(tài),而AM本身會(huì )被分配到另一個(gè)節點(diǎn)上(用戶(hù)可以指定重試次數,默認5) - ApplicationMasterLauncher:與某個(gè)NM通信,要求它為某個(gè)應用程序啟動(dòng)AM.
- ApplicationMasterService(AMS):處理來(lái)自AM的請求,包括:
- 應用管理模塊:主要是各個(gè)應用外圍的管理,并不涉及到應用內部
- ApplicationACLsManager:管理應用程序訪(fǎng)問(wèn)權限,包含兩部分:
- 查看權限:主要用于查看應用程序基本信息
- 修改權限:主要用于修改應用程序優(yōu)先級、殺死應用程序等
- RMAppManager:管理應用程序的啟動(dòng)和關(guān)閉.
- ContainerAllocationExpirer:當AM收到RM新分配的Container后,必須在一定時(shí)間(默認10m)內在對應的NM上啟動(dòng)該Container,
否則RM將強制回收該Container,而一個(gè)已經(jīng)分配的Container是否該被回收則是由ContainerAllocationExpirer決定和執行的
- ApplicationACLsManager:管理應用程序訪(fǎng)問(wèn)權限,包含兩部分:
- 狀態(tài)機管理模塊:RM使用有限狀態(tài)機維護有狀態(tài)對象的生命周期,狀態(tài)機的引入使得Yarn的架構設計清晰,RM內部的狀態(tài)機有:
- RMApp:維護一個(gè)應用程序的整個(gè)運行周期,包括從啟動(dòng)到運行結束的整個(gè)過(guò)程
- 由于一個(gè)APP的生命周期可能會(huì )啟動(dòng)多個(gè)運行實(shí)例(Attempt),RMApp維護的是所有的這些Attempt
- RMAppAttempt:一次應用程序的運行實(shí)例的整個(gè)生命周期,可以理解為APP的一次嘗試運行
- RMContainer:一個(gè)Container的運行周期,包括從創(chuàng )建到運行結束的整個(gè)過(guò)程。
- RM將資源封裝成Container發(fā)送給應用程序的AM,AM在Container描述的運行環(huán)境中啟動(dòng)任務(wù)
- Yarn不支持Container重用,一個(gè)Container用完后會(huì )立刻釋放
- RMNode:維護了一個(gè)NM的生命周期,包括從啟動(dòng)到運行結束的整個(gè)過(guò)程
- RMApp:維護一個(gè)應用程序的整個(gè)運行周期,包括從啟動(dòng)到運行結束的整個(gè)過(guò)程
- 安全模塊:RM自帶了非常全面的權限管理機制,主要包括:
- ClientToAMSecretManager
- ContainerTokenSecretManager
- ApplicationTokenSecretManager
- 調度模塊:主要包含一個(gè)組件ResourceScheduler。
- 資源調度器,它按照一定的約束條件(比如隊列容量限制等)將集群中的資源分配給各個(gè)應用程序,目前主要考慮內存和CPU。
- ResourceScheduler是一個(gè)可插拔式的模塊,自帶三個(gè)調度器,用戶(hù)可以自己定制。
- FIFO:先進(jìn)先出,單用戶(hù)。
- Fair Scheduler:公平調度器(FairScheduler基本上具備其它兩種的所有功能)
- Capacity Scheduler:容量調度器
RM事件與事件處理器
Yarn采用了事件驅動(dòng)機制,而RM是的實(shí)現則是最好的例證。所有服務(wù)和組件均是通過(guò)中央異步調度器組織在一起的,
不同組件之間通過(guò)事件交互,從而實(shí)現了一個(gè)異步并行的高效系統。
服務(wù)
組件名稱(chēng) | 輸出事件類(lèi)型 | 用途 |
---|---|---|
ClientRMService | RMAppAttemptEvent |
|
RMAppEvent RMNodeEvent |
||
NMLivelinessMonitor | RMNodeEvent | |
ResourceTrackerService | RMNodeEvent RMAppAttemptEvent |
|
AMLivelinessMonitor | RMAppAttemptEvent | |
ContainerAllocationExpirer | SchedulerEvent |
事件處理器
組件名稱(chēng) | 處理的事件類(lèi)型 | 輸出事件類(lèi)型 | 用途 |
---|---|---|---|
ApplicationMasterLauncher | AMLauncherEvent | - | |
RMAppManager | RMAppManagerEvent | RMAppEvent | |
NodesListManager | NodesListManagerEvent | RMNodeEvent RMAppEvent |
|
RMApp | RMAppEvent | RMAppAttemptEvent RMNodeEvent SchedulerEvent RMAppManagerEvent | |
RMAppAttempt | RMAppAttemptEvent | SchedulerEvent RMAppAttemptEvent RMAppEvent AMLauncherEvent RMNodeEvent | |
RMNode | RMNodeEvent | RMAppEvent SchedulerEvent NodesListManagerEvent RMNodeEvent |
|
ResourceScheduler | SchedulerEvent | RMAppEvent RMAppAttemptEvent | |
RMContainer | RMContainerEvent | RMAppEvent RMAppAttemptEvent RMNodeEvent |
事件處理器實(shí)現類(lèi)
-
RMApp 實(shí)現類(lèi):
- ApplicationEventDispatcher
- RMAppImpl
-
RMAppAttempt 實(shí)現類(lèi)
- ApplicationAttemptEventDispatcher
- RMAppAttemptImpl
-
RMNode實(shí)現類(lèi)
- NodeEventDispatcher
- RMNodeImpl
-
ResourceScheduler實(shí)現類(lèi)
- EventDispatcher
- FairScheduler
-
RMContainer實(shí)現類(lèi)
- RMContainerImpl
- RMContainerImpl

0 評論