一起揭開 YARN 的神秘面紗

我們知道MapReduce1.0,是把計算框架和資源調(diào)度框架都弄在一起了,所以Master端的JobTracker會大包大攬去執(zhí)行任務(wù),存在很多問題,比如資源分配不均、單點(diǎn)故障會導(dǎo)致整個集群不可用、沒辦法集成多個不同的計算框架(比如Spark、Storm)。因此,YARN的設(shè)計思路就是把原先JobTracker的資源管理調(diào)度和監(jiān)控的功能剝離出來,在YARN中實(shí)現(xiàn),而MapReduce2.0僅僅就是做計算框架的事情。同時,YARN還可以兼容搭建多個不同的計算框架,實(shí)現(xiàn)同一個集群內(nèi)資源和數(shù)據(jù)的共享。

YARN系統(tǒng)架構(gòu)中有3個核心組件:ResourceManager、ApplicationMaster和NodeManager。
1. ResourceManager
一個全局的資源管理器,負(fù)責(zé)整個系統(tǒng)的資源調(diào)度,包含兩個核心組件:Scheduler(調(diào)度器)和Application Manager(應(yīng)用程序管理器)。
Scheduler:接收來自ApplicationMaster的應(yīng)用資源請求,把集群中的資源以 Container(容器)的方式分配下去。其中,Container作為動態(tài)資源分配單位,每個容器中會封裝一定數(shù)量的CPU、內(nèi)存資源; Application Manager:負(fù)責(zé)系統(tǒng)中所有應(yīng)用程序的管理,主要包括了應(yīng)用程序的提交、與Scheduler的資源協(xié)商、啟動ApplicationMaster、監(jiān)控ApplicationMaster以及失敗重啟。
這個組件主要實(shí)現(xiàn):
1)處理客戶端請求
2)啟動/監(jiān)控 ApplicationMaster
3)監(jiān)控 NodeManager
4)資源分配與調(diào)度
2. ApplicationMaster
主要負(fù)責(zé)任務(wù)調(diào)度、監(jiān)控以及容錯機(jī)制,為應(yīng)用程序向ResourceManager申請,并在內(nèi)部進(jìn)行分配。
這個組件主要實(shí)現(xiàn):
1)ResourceManager接收來自用戶的作業(yè)需求,按照J(rèn)ob的上下文信息啟動調(diào)度,為用戶作業(yè)啟動一個ApplicationMaster。
2)ApplicationMaster會根據(jù)用戶作業(yè),與ResourceManager協(xié)商獲取資源,以容器形式從NodeManager請求獲得。接著ApplicationMaster會將獲取的資源,進(jìn)一步在內(nèi)部分配給各個task任務(wù)。
3)與NodeManager保持交互通信(程序狀態(tài)、資源使用情況、進(jìn)度等等)
4)定時向ResourceManager發(fā)送“心跳”信息,報告資源使用情況和進(jìn)度
5)當(dāng)作業(yè)完成時,ApplicationMaster向ResourceManager注銷容器,發(fā)送請求到NodeManager去執(zhí)行注銷
3. NodeManager
駐留在一個YARN集群中每個節(jié)點(diǎn)上的代理。負(fù)責(zé)單個節(jié)點(diǎn)上的資源管理,處理來自于 ResourceManager和ApplicationMaster的命令。
這個組件主要實(shí)現(xiàn):
1)負(fù)責(zé)容器生命周期管理
2)監(jiān)控每個容器的資源(CPU/內(nèi)存)使用情況
3)以“心跳”方式與ResourceManager保持通信
4)向ResourceManager匯報作業(yè)的資源使用情況以及每個容器的運(yùn)行狀態(tài)
5)跟蹤節(jié)點(diǎn)的健康狀態(tài)
6)接收來自ApplicationMaster的啟動/停止容器的請求
4. YARN工作流程

1、用戶編寫客戶端應(yīng)用程序向YARN提交;
2、YARN中的ResourceManager負(fù)責(zé)接收和處理來自客戶端的請求,為應(yīng)用分配一個容器,在容器中啟動一個ApplicationMaster,并且在ResourceManager內(nèi)注冊;
3、ApplicationMaster采用輪詢的方式向ResourceManager申請資源(Resource Scheduler);
4、ResourceManager以容器的形式向提出申請的ApplicationMaster分配資源;
5、在容器中啟動任務(wù)(資源的二次分配);
6、各個任務(wù)向ApplicationMaster匯報自己的狀態(tài)和進(jìn)度;
7、應(yīng)用程序運(yùn)行完成后,ApplicationMaster向ResourceManager的Application Manager注銷并關(guān)閉自己,釋放資源。
Reference
林子雨-大數(shù)據(jù)技術(shù)原理與應(yīng)用- B站視頻 https://www.bilibili.com/video/BV1EE411x7wk?p=68
