ResourceManager學(xué)習(xí)之ApplicationMaster,NodeManager管理

ApplicationMaster管理部分主要由三個(gè)服務(wù)構(gòu)成,分別是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService,它們共同管理應(yīng)用程序的ApplicationMaster的生命周期

ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService這三個(gè)組件是如何協(xié)同管理ApplicationMaster生命周期,介紹從ResourceManager獲得資源啟動(dòng)ApplicationMaster :

  1. 用戶向YARN ResourceManager提交應(yīng)用程序,ResourceManager收到提交請求后,先向資源調(diào)度器申請用以啟動(dòng)ApplicationMaster的資源,待申請到資源后,再由ApplicationMasterLauncher與對應(yīng)的NodeManager通信,從而啟動(dòng)應(yīng)用程序的ApplicationMaster
  2. ApplicationMaster啟動(dòng)完成后,ApplicationMasterLauncher會(huì)通過事件的形式,將剛剛啟動(dòng)的ApplicationMaster注冊到AMLivelinessMonitor,以啟動(dòng)心跳監(jiān)控
  3. ApplicationMaster啟動(dòng)后,先向ApplicationMasterService注冊,并將自己所在host、端口號等信息匯報(bào)給它
  4. ApplicationMaster運(yùn)行過程中,周期性地向ApplicationMasterService匯報(bào)心跳信息
  5. ApplicationMasterService每次收到ApplicationMaster的心跳信息后,將通知AMLivelinessMonitor更新該應(yīng)用程序的最近匯報(bào)心跳的時(shí)間
  6. 當(dāng)應(yīng)用程序運(yùn)行完成后,ApplicationMaster向ApplicationMasterService發(fā)送請求,注銷自己
  7. ApplicationMasterService收到注銷請求后,標(biāo)注應(yīng)用程序運(yùn)行狀態(tài)為完成,同時(shí)通知AMLivelinessMonitor移除對它的心跳監(jiān)控

介紹三個(gè)服務(wù)

(1) ApplicationMasterLauncher

ApplicationMasterLauncher即是一個(gè)服務(wù),也是一個(gè)事件處理器,它處理AMLauncherEvent類型的事件,該類型事件有兩種,分別是請求啟動(dòng)一個(gè)ApplicationMaster的"LAUNCH"事件和請求清理一個(gè)ApplicationMaster的"CLEANUP"事件。ApplicationMasterLauncher維護(hù)了一個(gè)線程池,從而能夠盡快地處理這兩種事件

  • 如果ApplicationMasterLauncher收到了"LAUNCH"類型的事件,它會(huì)與對應(yīng)的NodeManager通信,要求它啟動(dòng)ApplicationMaster。整個(gè)過程比較簡單,首先創(chuàng)建一個(gè)ContainerManagementProtocol協(xié)議的客戶端,然后向?qū)?yīng)的NodeManager發(fā)起連接請求,接著將啟動(dòng)AM所需的各種信息,包括啟動(dòng)命令、JAR包、環(huán)境變量等信息,封裝成一個(gè)StartContainerRequest對象,然后通過RPC函數(shù)ContainerManagementProtocol#startContainer發(fā)送給對應(yīng)的NM
  • 如果ApplicationMasterLauncher收到了"CLEANUP"類型的事件,它與對應(yīng)的NodeManager通信,要求它殺死ApplicationMaster。整個(gè)過程與啟動(dòng)AM的過程類似

(2) AMLivelinessMonitor

該服務(wù)周期性遍歷所有應(yīng)用程序的ApplicationMaster,如果一個(gè)ApplicationMaster在一定時(shí)間內(nèi)未匯報(bào)心跳信息,則認(rèn)為它死掉了,它上面所有正在運(yùn)行的Container將被置為運(yùn)行失??;如果AM運(yùn)行失敗,則由RM重新為它申請資源,以便能夠重新分配到另外一個(gè)節(jié)點(diǎn)上執(zhí)行

(3) ApplicationMasterService

ApplicationMasterService實(shí)現(xiàn)了RPC協(xié)議ApplicationMasterProtocol,負(fù)責(zé)處理來自ApplicationMaster的請求,請求主要包括注冊、心跳和清理三種,其中,注冊是ApplicationMaster啟動(dòng)時(shí)發(fā)生的行為,請求包中包含AM所在節(jié)點(diǎn)、RPC端口號和tracking URL等信息;心跳是周期性行為,包含請求資源的類型描述、待釋放的Container列表等,而AMS為之返回新分配的Container、失敗的Container等信息;清理是應(yīng)用程序運(yùn)行結(jié)束時(shí)發(fā)生的行為,ApplicationMaster向RM發(fā)送清理應(yīng)用程序的請求,以回收資源和清理各種內(nèi)存空間

ApplicationMasterLauncher啟動(dòng)AM后,AM做的第一件事是向RM注冊,這是通過RPC函數(shù)ApplicationMasterProtocol#registerApplicationMaster實(shí)現(xiàn)的

AM運(yùn)行過程中,需要周期性地通過RPC函數(shù)ApplicationMasterProtocol#allocate與RM通信,這主要有以下三個(gè)作用 :

  • 請求資源
  • 獲取新分配的資源
  • 形成周期性心跳,告訴RM自己還活著

AM運(yùn)行結(jié)束后,需要通過RPC函數(shù)ApplicationMasterProtocol#finishApplicationMaster告訴RM自己運(yùn)行結(jié)束,可以回收資源和清理各種數(shù)據(jù)結(jié)果了


NodeManager管理部分主要由三個(gè)服務(wù)構(gòu)成,分別是NMLivelinessMonitor,NodesListManager和ResourceTrackerService,它們共同管理NodeManager的生命周期

介紹三個(gè)服務(wù)

(1) NMLivelinessMonitor

該服務(wù)周期性的遍歷集群中所有NodeManager,如果一個(gè)NodeManager在一定時(shí)間內(nèi)未匯報(bào)心跳信息,則認(rèn)為它死掉了,它上面所有正在運(yùn)行的Container將被置為運(yùn)行失敗。需要注意的是,RM不會(huì)重新執(zhí)行這些Container,它只會(huì)通過心跳機(jī)制告訴對應(yīng)的AM,由AM決定是否重新執(zhí)行。如果需要,則AM重新向RM申請資源,然后由AM與對應(yīng)的NodeManager通信以重新運(yùn)行失敗的Container

(2) NodesListManager

NodesListManager管理exlude(類似于黑名單)和inlude(類似于白名單)節(jié)點(diǎn)列表,這兩個(gè)列表所在的文件分別可通過yarn.resourcemanager.nodes.include-path和yarn.resourcemanager.nodes.exclude-path配置,其中,exlude節(jié)點(diǎn)列表可認(rèn)為是黑名單,它們不允許直接與RM通信,而inlude節(jié)點(diǎn)列表可認(rèn)為是白名單。默認(rèn)情況下,這兩個(gè)列表均為空,表示任何節(jié)點(diǎn)均被允許接入RM。需要注意的是,管理員可通過命令"bin/yarn rmadmin -refreshNodes"動(dòng)態(tài)加載這兩個(gè)文件

(3) ResourceTrackerService

ResourceTrackerService實(shí)現(xiàn)了RPC協(xié)議ResourceTracker,負(fù)責(zé)處理來自各個(gè)NodeManager的請求,請求主要包括注冊和心跳兩種,其中,注冊是NodeManager啟動(dòng)時(shí)發(fā)生的行為,請求包中包含節(jié)點(diǎn)ID,可用的資源上限等信息;而心跳時(shí)周期性行為,包含各個(gè)Container運(yùn)行狀態(tài),運(yùn)行的Application列表,節(jié)點(diǎn)健康狀況,而ResourceTrackerService則為NM返回待釋放的Container列表、Application列表等

NM啟動(dòng)時(shí),它所作的第一件事是向RM注冊,這是通過RPC函數(shù)ResourceTracker#registerNodeManager實(shí)現(xiàn)的,注冊信息包括節(jié)點(diǎn)可用資源總量,對外開放的HTTP端口號等

NM啟動(dòng)后,他會(huì)周期性地通過RPC函數(shù)ResourceTracker#nodeHeartbeat匯報(bào)心跳,心跳信息包含各個(gè)Container運(yùn)行狀態(tài),運(yùn)行的Application列表,節(jié)點(diǎn)健康狀況等信息,而RM則為之返回需要釋放的Container列表,Application列表等

我每天會(huì)寫文章記錄大數(shù)據(jù)技術(shù)學(xué)習(xí)之路,另外我自己整理了些大數(shù)據(jù)的學(xué)習(xí)資料,目前全部放在我的公眾號"SmallBird技術(shù)分享",加入我們一起學(xué)習(xí)交流,并且回復(fù)'分享'會(huì)有大數(shù)據(jù)資源驚喜等著你~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容