微信公眾號(hào):北風(fēng)中獨(dú)行的蝸牛
YARN 集群也分為Master/Slave架構(gòu),主要由ResourceManager,NodeManager, ApplicationMaster,Container等組成。
ResourceManager 全局資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理分配和任務(wù)調(diào)度。ResourceManager包含Scheduler調(diào)度器和應(yīng)用程序管理器Application mananger。調(diào)度器只是負(fù)責(zé)資源的分配,資源分配的單位是container,應(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)它等。
NodeManager是每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器,它會(huì)向ResourceManager定時(shí)匯報(bào)本節(jié)點(diǎn)的資源使用情況和各個(gè)Container的運(yùn)行狀態(tài),同時(shí)會(huì)接受處理來(lái)自ApplicationMaster的對(duì)Container的啟動(dòng)/停止請(qǐng)求。NodeManager不會(huì)監(jiān)視具體的任務(wù),他僅監(jiān)視Container的使用情況。
Task是應(yīng)用程序的具體任務(wù)。例如map任務(wù),reduce任務(wù)等
Container是Yarn中的資源的具體分配單位,封裝了CPU和內(nèi)存資源的容器,相當(dāng)于是一個(gè)Task的運(yùn)行環(huán)境的具體抽象。從實(shí)現(xiàn)上看,Container是一個(gè)抽象類,里面定義資源信息。在NodeManager節(jié)點(diǎn)上擁有許多動(dòng)態(tài)創(chuàng)建的Container。NodeManager會(huì)將計(jì)算機(jī)的CPU和內(nèi)存的一定值抽離成虛擬值,然后這些虛擬值根據(jù)配置組成多個(gè)Container,當(dāng)應(yīng)用提出申請(qǐng)的時(shí)候,會(huì)分配相應(yīng)的Container。
應(yīng)用程序運(yùn)行的Container也分為兩類,一類是運(yùn)行的ApplicationMaster的Container,一類是運(yùn)行Task的Container。前者是由ResourceManager向內(nèi)部的調(diào)度器申請(qǐng)和啟動(dòng),后者是由ApplicationMaster向ResourceManager申請(qǐng),并由ApplicationMaster請(qǐng)求NodeManager啟動(dòng)ApplicationMaster應(yīng)用內(nèi)程序管理者。它向ResourceManager申請(qǐng)資源,CPU內(nèi)存等,并將資源分配給task。一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)applicationMaster。在用戶提交一個(gè)應(yīng)用程序的時(shí)候,會(huì)啟動(dòng)一個(gè)ApplicationMaster實(shí)例,ApplicationMaster會(huì)啟動(dòng)所需要的的Task,并監(jiān)控task的運(yùn)行狀態(tài),進(jìn)度等。應(yīng)用程序執(zhí)行完之后,ApplicationMaster會(huì)關(guān)閉自己并釋放Container。
MapReduce的處理過(guò)程:
- 提交MapReduce程序到ResourceManager
- ResourceManager分配container,并要求NodeManager啟動(dòng)APPMaster。 AppMaster負(fù)責(zé)此應(yīng)用程序的整個(gè)生命周期。
- AppMaster向ResourceManager注冊(cè)(注冊(cè)成功后,可以通過(guò)ResourceManager查看應(yīng)用程序運(yùn)行的狀態(tài))。AppMaster請(qǐng)求各個(gè)應(yīng)用程序所需要的container
- AppMaster請(qǐng)求NodeManager使用這些Container運(yùn)行task。
- 各個(gè)Task通過(guò)RPC協(xié)議向AppMaster匯報(bào)自己的運(yùn)行狀態(tài)和進(jìn)度,如果task運(yùn)行失敗,AppMaster可以要求重新啟動(dòng)。當(dāng)所有的task完成,AppMaster向ResourceManager注銷自己。
歡迎關(guān)注我的微信公眾號(hào): 北風(fēng)中獨(dú)行的蝸牛
[圖片上傳失敗...(image-4e3b92-1592530565628)]