名詞介紹
ResourceManager:簡(jiǎn)稱RM,是YARN資源控制框架的中心模塊膛檀,負(fù)責(zé)集群中所有的資源的統(tǒng)一管理和分配芒粹,它接收來自NM(NodeManager)的匯報(bào),建立AM废菱,并將資源派送給AM(ApplicationMaster)技矮。
NodeManager:簡(jiǎn)稱NM,NodeManager是ResourceManager在每臺(tái)機(jī)器上的代理殊轴,負(fù)責(zé)容器的管理衰倦,并監(jiān)控他們的資源使用情況(CPU、內(nèi)存旁理、磁盤及網(wǎng)絡(luò)等)樊零,以及向ResourceManager提供這些資源使用報(bào)告。
ApplicationMaster:簡(jiǎn)稱AM孽文,YARN中每個(gè)應(yīng)用都會(huì)啟動(dòng)一個(gè)AM驻襟,負(fù)責(zé)向RM申請(qǐng)資源夺艰,請(qǐng)求NM啟動(dòng)container,并告訴container要做什么事情沉衣。
Container:資源容器郁副。YARN中所有的應(yīng)用都是在container之上運(yùn)行的。AM也是在container上運(yùn)行的厢蒜,不過AM的container是RM申請(qǐng)的霞势。
Apache Hadoop YARN(Yet Another Resource Negotiator,另一個(gè)資源協(xié)調(diào)者):是一種新的Hadoop資源管理器斑鸦,它是一個(gè)通用資源管理系統(tǒng)愕贡。
Yarn主要架構(gòu)
ResourceManager(RM)
ResourceManager是一個(gè)全局的資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配巷屿。它主要由兩個(gè)組件構(gòu)成: 調(diào)度器 (Scheduler)和 應(yīng)用程序管理器 (Applications Manager固以,ASM)。
- 調(diào)度器(Scheduler):調(diào)度器根據(jù)容量嘱巾、隊(duì)列等限制條件(如每個(gè)隊(duì)列分配一定的資源憨琳,最多執(zhí)行一定數(shù)量的作業(yè)等),將系統(tǒng)中的資源分配給各個(gè)正在運(yùn)行的應(yīng)用程序旬昭。
- 應(yīng)用程序管理器:應(yīng)用程序管理器負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序篙螟,包括應(yīng)用程序提交、與調(diào)度器協(xié)商資源以啟動(dòng)ApplicationMaster问拘、監(jiān)控ApplicationMaster運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)它等遍略。
ApplicationMaster(AM)
用戶提交的每個(gè)應(yīng)用程序均包含一個(gè)AM,主要功能包括:
- 與RM調(diào)度器協(xié)商以獲取資源(以Container表示)
- 將得到的任務(wù)進(jìn)一步分配給內(nèi)部的任務(wù)
- 與NM通信以啟動(dòng)/停止任務(wù)
- 監(jiān)控所有任務(wù)運(yùn)行狀態(tài)骤坐,并在任務(wù)失敗時(shí)重新為任務(wù)申請(qǐng)資源以重啟任務(wù)
NodeManager(NM)
NM是每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器绪杏。
- 它定時(shí)地向RM匯報(bào)本節(jié)點(diǎn)的資源使用情況和Container運(yùn)行狀態(tài);
- 它接受并處理來自AM的Container啟動(dòng)/停止等各種請(qǐng)求纽绍。
Container
Container是YARN中的資源抽象蕾久,它封裝了某個(gè)節(jié)點(diǎn)上的多維資源,如CPU拌夏、內(nèi)存僧著、磁盤、網(wǎng)絡(luò)等障簿。當(dāng)AM向RM申請(qǐng)資源時(shí)盹愚,RM向AM返回的資源便是用Container表示的。YARN會(huì)為每個(gè)任務(wù)分配一個(gè)Container卷谈,且該任務(wù)只能使用該Container中描述的資源。Container是一個(gè)動(dòng)態(tài)資源劃分單位霞篡,是根據(jù)應(yīng)用程序的需求自動(dòng)生成的世蔗。目前端逼,YARN僅支持CPU和內(nèi)存兩種資源。
YARN工作流程
1污淋、用戶向YARN中提交應(yīng)用程序顶滩,其中包括ApplicationMaster程序、啟動(dòng)ApplicationMaster的命令寸爆、用戶程序等礁鲁。
2、ResourceManager為該應(yīng)用程序分配第一個(gè)Container赁豆,并與對(duì)應(yīng)的NodeManager通信仅醇,要求它在這個(gè)Container中啟動(dòng)應(yīng)用程序的ApplicationMaster。
3魔种、ApplicationMaster首先向ResourceManager注冊(cè)析二,這樣用戶就可以直接通過ResourceManager查看應(yīng)用程序的運(yùn)行狀態(tài),然后它將為各個(gè)任務(wù)申請(qǐng)資源节预,并監(jiān)控它的運(yùn)行狀態(tài)叶摄,直到運(yùn)行結(jié)束,即重復(fù)步驟4~7安拟。
4蛤吓、ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請(qǐng)和領(lǐng)取資源。
5糠赦、一旦ApplicationMaster申請(qǐng)到資源后会傲,便與對(duì)應(yīng)的NodeManager通信,要求它啟動(dòng)任務(wù)愉棱。
6唆铐、NodeManager為任務(wù)設(shè)置好運(yùn)行環(huán)境(包括環(huán)境變量、JAR包奔滑、二進(jìn)制程序等)后艾岂,將任務(wù)啟動(dòng)命令寫到一個(gè)腳本中,并通過運(yùn)行該腳本啟動(dòng)任務(wù)朋其。
7王浴、各個(gè)任務(wù)通過某個(gè)RPC協(xié)議向ApplicationMaster匯報(bào)自己的狀態(tài)和進(jìn)度,以讓ApplicationMaster隨時(shí)掌握各個(gè)任務(wù)的運(yùn)行狀態(tài)梅猿,從而可以在任務(wù)失敗時(shí)重新啟動(dòng)任務(wù)氓辣。
8、應(yīng)用程序運(yùn)行完成后袱蚓,ApplicationMaster向ResourceManager注銷并關(guān)閉自己钞啸。