作者:幻好
基本概述
Apache YARN (Yet Another Resource Negotiator) 是 Hadoop 中的資源管理和作業(yè)調(diào)度系統(tǒng), 在 Hadoop 2.x 時(shí)才被引入。
用戶可以將各種服務(wù)框架部署在 YARN 上,由 YARN 進(jìn)行統(tǒng)一地管理和資源分配。
Yarn在 Hadoop2.x 時(shí)才被推出,在 Hadoop1.x 時(shí),主要由 MapReduce 進(jìn)行資源分配,由于考慮到如果 MapReduce 在計(jì)算中掛掉了,那么資源調(diào)度也將停止工作,于是在新版本中將資源調(diào)度這部分功能剝離開,才有 Yarn。
核心架構(gòu)
Yarn 的主要架構(gòu)分為四個(gè)部分:ResourceManager、NodeManager、ApplicationMaster、Container
ResourceManager
ResourceManager
通常在獨(dú)立的部署在一臺(tái)機(jī)器作為應(yīng)用運(yùn)行,集群中只有一個(gè),負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配。ResourceManager
主要由兩個(gè)組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager,ASM)。能夠根據(jù)應(yīng)用程序優(yōu)先級(jí)、隊(duì)列容量、數(shù)據(jù)位置等信息,做出決策,通過安全的、共享的、多租戶的方式制定分配策略,調(diào)度集群資源。
NodeManager
NodeManager
是 YARN 集群中的每個(gè)具體節(jié)點(diǎn)的管理者。主要負(fù)責(zé)該節(jié)點(diǎn)內(nèi)所有容器的生命周期的管理,監(jiān)視資源和跟蹤節(jié)點(diǎn)健康。NodeManager
主要用來處理來自ResourceManager
、ApplicationMaster
的命令。
一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),它會(huì)向 ResourceManager 進(jìn)行注冊(cè)并推送可用資源信息。在運(yùn)行期,通過 NodeManager 和 ResourceManager 協(xié)同工作,這些信息會(huì)不斷被更新并保障整個(gè)集群發(fā)揮出最佳狀態(tài)。
ApplicationMaster
- 在用戶提交一個(gè)應(yīng)用程序時(shí),YARN 會(huì)啟動(dòng)一個(gè)輕量級(jí)的進(jìn)程
ApplicationMaster
。 ApplicationMaster
負(fù)責(zé)協(xié)調(diào)來自ResourceManager
的資源,并通過NodeManager
監(jiān)視容器內(nèi)資源的使用情況,同時(shí)還負(fù)責(zé)任務(wù)的監(jiān)控與容錯(cuò)。
ApplicationMaster 將能將數(shù)據(jù)進(jìn)行拆分,并根據(jù)應(yīng)用的運(yùn)行狀態(tài)動(dòng)態(tài)匹配資源需求,能夠監(jiān)控跟蹤任務(wù)狀態(tài)和進(jìn)度,報(bào)告應(yīng)用的進(jìn)度信息。
Container
Container
是 YARN 中的資源抽象,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等。- 當(dāng)
ApplicationMaster
向ResourceManager
申請(qǐng)資源時(shí),ResourceManager
為ApplicationMaster
返回的資源是用Container
表示的。 - YARN 會(huì)為每個(gè)任務(wù)分配一個(gè)
Container
,該任務(wù)只能使用該Container
中描述的資源。 ApplicationMaster
可在Container
內(nèi)運(yùn)行任何類型的任務(wù)。
工作流程
YARN 應(yīng)用提交的整個(gè)工作流程:
- 首先客戶端提交任務(wù)到 YARN 上,
ResourceManager
提交應(yīng)用并請(qǐng)求一個(gè)ApplicationMaster
實(shí)例; ResourceManager
會(huì)選擇一個(gè)可運(yùn)行的NodeManager
,并在Container
中啟動(dòng)并運(yùn)行ApplicationMaster
實(shí)例;- 啟動(dòng)中的
ApplicationMaster
向ResourceManager
注冊(cè)自己,啟動(dòng)成功后與RM保持心跳。 ApplicationMaster
向ResourceManager
發(fā)送請(qǐng)求,獲取需要的Container
資源;ApplicationMaster
通過獲取到的Container
資源執(zhí)行分布式計(jì)算。- 應(yīng)用運(yùn)行結(jié)束后,
ApplicationMaster
向ResourceManager
注銷自己,并允許屬于它的container
被收回。
總結(jié)
Yarn 主要在 Hadoop 體系中負(fù)責(zé)服務(wù)資源的調(diào)度分配,能夠最大限度的利用機(jī)器資源,高效調(diào)配,達(dá)到資源利用的最大化。