一、簡介
YARN(Yet Another Resource Negotiator)是一個通用的資源管理平臺,可爲各類計算框架提供資源的管理和調度。
其核心出發點是爲了分離資源管理與作業調度/監控,實現分離的做法是擁有一個全局的資源管理器(ResourceManager,RM),以及每個應用程序對應一個的應用管理器(ApplicationMaster,AM),應用程序由一個作業(Job)或者Job的有向無環圖(DAG)組成。
YARN可以將多種計算框架(如離線處理MapReduce、在線處理的Storm、迭代式計算框架Spark、流式處理框架S4等) 部署到一個公共集羣中,共享集羣的資源。並提供如下功能:
-
資源的統一管理和調度:
集羣中所有節點的資源(內存、CPU、磁盤、網絡等)抽象爲Container。計算框架需要資源進行運算任務時需要向YARN申請Container, YARN按照特定的策略對資源進行調度進行Container的分配。 -
資源隔離:
YARN使用了輕量級資源隔離機制Cgroups進行資源隔離以避免相互干擾,一旦Container使用的資源量超過事先定義的上限值,就將其殺死。
二、Yarn結構體系
1 RM(ResourceManager) + N NM(NodeManager)
ResourceManager
1)處理客戶端的請求(啓動/殺死)
2)啓動/監控ApplicationMaster(一個作業對應一個AM)
3)監控NM
4)系統的資源分配和調度
一個集羣active狀態的RM只有一個,負責整個集羣的資源管理和調度
NodeManager
1)定期向RM彙報本節點的資源使用請求和各個Container的運行狀態
2)接收並處理RM的container啓停的各種命令
3)單個節點的資源管理和任務管理
整個集羣中有N個,負責單個節點的資源管理和使用以及task的運行情況
ApplicationMaster
1)數據切分
2)爲應用程序向RM申請資源(container),並分配給內部任務
3)與NM通信以啓停task, task是運行在container中的
4)task的監控和容錯
每個應用/作業對應一個,負責應用程序的管理
Container
對任務運行情況的描述:cpu、memory、環境變量
YARN執行流程
1)用戶向YARN提交作業
2)RM爲該作業分配第一個container(AM)
3)RM會與對應的NM通信,要求NM在這個container上啓動應用程序的AM
4) AM首先向RM註冊,然後AM將爲各個任務申請資源,並監控運行情況
5)AM採用輪訓的方式通過RPC協議向RM申請和領取資源
6)AM申請到資源以後,便和相應的NM通信,要求NM啓動任務
7)NM啓動我們作業對應的task