從圖上看上渴,Yarn 包括兩個(gè)部分:一個(gè)是資源管理器(Resource Manager)刃唤,一個(gè)是節(jié)點(diǎn)管理器(Node Manager)震缭。這也是 Yarn 的兩種主要進(jìn)程:ResourceManager 進(jìn)程負(fù)責(zé)整個(gè)集群的資源調(diào)度管理,通常部署在獨(dú)立的服務(wù)器上窿祥;NodeManager 進(jìn)程負(fù)責(zé)具體服務(wù)器上的資源和任務(wù)管理,在集群的每一臺(tái)計(jì)算服務(wù)器上都會(huì)啟動(dòng)庇麦,基本上跟 HDFS 的 DataNode 進(jìn)程一起出現(xiàn)计技。
具體說來,資源管理器又包括兩個(gè)主要組件:調(diào)度器和應(yīng)用程序管理器山橄。
調(diào)度器其實(shí)就是一個(gè)資源分配算法垮媒,根據(jù)應(yīng)用程序(Client)提交的資源申請(qǐng)和當(dāng)前服務(wù)器集群的資源狀況進(jìn)行資源分配。Yarn 內(nèi)置了幾種資源調(diào)度算法航棱,包括 Fair Scheduler睡雇、Capacity Scheduler 等,你也可以開發(fā)自己的資源調(diào)度算法供 Yarn 調(diào)用饮醇。
Yarn 進(jìn)行資源分配的單位是容器(Container)它抱,每個(gè)容器包含了一定量的內(nèi)存、CPU 等計(jì)算資源朴艰,默認(rèn)配置下观蓄,每個(gè)容器包含一個(gè) CPU 核心。容器由 NodeManager 進(jìn)程啟動(dòng)和管理祠墅,NodeManger 進(jìn)程會(huì)監(jiān)控本節(jié)點(diǎn)上容器的運(yùn)行狀況并向 ResourceManger 進(jìn)程匯報(bào)侮穿。
應(yīng)用程序管理器負(fù)責(zé)應(yīng)用程序的提交、監(jiān)控應(yīng)用程序運(yùn)行狀態(tài)等毁嗦。應(yīng)用程序啟動(dòng)后需要在集群中運(yùn)行一個(gè) ApplicationMaster亲茅,ApplicationMaster 也需要運(yùn)行在容器里面。每個(gè)應(yīng)用程序啟動(dòng)后都會(huì)先啟動(dòng)自己的 ApplicationMaster狗准,由 ApplicationMaster 根據(jù)應(yīng)用程序的資源需求進(jìn)一步向 ResourceManager 進(jìn)程申請(qǐng)容器資源芯急,得到容器以后就會(huì)分發(fā)自己的應(yīng)用程序代碼到容器上啟動(dòng),進(jìn)而開始分布式計(jì)算驶俊。
-以一個(gè) MapReduce 程序?yàn)槔⑺#瑏砜匆幌?Yarn 的整個(gè)工作流程。
- 我們向 Yarn 提交應(yīng)用程序饼酿,包括 MapReduce ApplicationMaster榕酒、我們的 MapReduce 程序,以及 MapReduce Application 啟動(dòng)命令故俐。
2.ResourceManager 進(jìn)程和 NodeManager 進(jìn)程通信想鹰,根據(jù)集群資源,為用戶程序分配第一個(gè)容器药版,并將 MapReduce ApplicationMaster 分發(fā)到這個(gè)容器上面辑舷,并在容器里面啟動(dòng) MapReduce ApplicationMaster。
3.MapReduce ApplicationMaster 啟動(dòng)后立即向 ResourceManager 進(jìn)程注冊(cè)槽片,并為自己的應(yīng)用程序申請(qǐng)容器資源何缓。
4.MapReduce ApplicationMaster 申請(qǐng)到需要的容器后肢础,立即和相應(yīng)的 NodeManager 進(jìn)程通信,將用戶 MapReduce 程序分發(fā)到 NodeManager 進(jìn)程所在服務(wù)器碌廓,并在容器中運(yùn)行传轰,運(yùn)行的就是 Map 或者 Reduce 任務(wù)。
5.Map 或者 Reduce 任務(wù)在運(yùn)行期和 MapReduce ApplicationMaster 通信谷婆,匯報(bào)自己的運(yùn)行狀態(tài)慨蛙,如果運(yùn)行結(jié)束,MapReduce ApplicationMaster 向 ResourceManager 進(jìn)程注銷并釋放所有的容器資源纪挎。
MapReduce 如果想在 Yarn 上運(yùn)行期贫,就需要開發(fā)遵循 Yarn 規(guī)范的 MapReduce ApplicationMaster,相應(yīng)地异袄,其他大數(shù)據(jù)計(jì)算框架也可以開發(fā)遵循 Yarn 規(guī)范的 ApplicationMaster唯灵,這樣在一個(gè) Yarn 集群中就可以同時(shí)并發(fā)執(zhí)行各種不同的大數(shù)據(jù)計(jì)算框架,實(shí)現(xiàn)資源的統(tǒng)一調(diào)度管理隙轻。