ApplicationMaster管理部分主要由三個服務構成,分別是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService,它們共同管理應用程序的ApplicationMaster的生命週期
ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService這三個組件是如何協同管理ApplicationMaster生命週期,介紹從ResourceManager得到資源啓動ApplicationMaster :
-
用戶向YARN ResourceManager提交應用程序,ResourceManager收到提交請求後,先向資源調度器申請用以啓動ApplicationMaster的資源,待申請到資源後,再由ApplicationMasterLauncher與對應的NodeManager通訊,從而啓動應用程序的ApplicationMaster
-
ApplicationMaster啓動完成後,ApplicationMasterLauncher會經過事件的形式,將剛剛啓動的ApplicationMaster註冊到AMLivelinessMonitor,以啓動心跳監控
-
ApplicationMaster啓動後,先向ApplicationMasterService註冊,並將本身所在host、端口號等信息彙報給它
-
ApplicationMaster運行過程當中,週期性地向ApplicationMasterService彙報心跳信息
-
ApplicationMasterService每次收到ApplicationMaster的心跳信息後,將通知AMLivelinessMonitor更新該應用程序的最近彙報心跳的時間
-
當應用程序運行完成後,ApplicationMaster向ApplicationMasterService發送請求,註銷本身
-
ApplicationMasterService收到註銷請求後,標註應用程序運行狀態爲完成,同時通知AMLivelinessMonitor移除對它的心跳監控
介紹三個服務
(1) ApplicationMasterLauncher
ApplicationMasterLauncher便是一個服務,也是一個事件處理器,它處理AMLauncherEvent類型的事件,該類型事件有兩種,分別是請求啓動一個ApplicationMaster的"LAUNCH"事件和請求清理一個ApplicationMaster的"CLEANUP"事件。ApplicationMasterLauncher維護了一個線程池,從而可以儘快地處理這兩種事件
-
若是ApplicationMasterLauncher收到了"LAUNCH"類型的事件,它會與對應的NodeManager通訊,要求它啓動ApplicationMaster。整個過程比較簡單,首先建立一個ContainerManagementProtocol協議的客戶端,而後向對應的NodeManager發起鏈接請求,接着將啓動AM所需的各類信息,包括啓動命令、JAR包、環境變量等信息,封裝成一個StartContainerRequest對象,而後經過RPC函數ContainerManagementProtocol#startContainer發送給對應的NM
-
若是ApplicationMasterLauncher收到了"CLEANUP"類型的事件,它與對應的NodeManager通訊,要求它殺死ApplicationMaster。整個過程與啓動AM的過程相似
(2) AMLivelinessMonitor
該服務週期性遍歷全部應用程序的ApplicationMaster,若是一個ApplicationMaster在必定時間內未彙報心跳信息,則認爲它死掉了,它上面全部正在運行的Container將被置爲運行失敗;若是AM運行失敗,則由RM從新爲它申請資源,以便可以從新分配到另一個節點上執行
(3) ApplicationMasterService
ApplicationMasterService實現了RPC協議ApplicationMasterProtocol,負責處理來自ApplicationMaster的請求,請求主要包括註冊、心跳和清理三種,其中,註冊是ApplicationMaster啓動時發生的行爲,請求包中包含AM所在節點、RPC端口號和tracking URL等信息;心跳是週期性行爲,包含請求資源的類型描述、待釋放的Container列表等,而AMS爲之返回新分配的Container、失敗的Container等信息;清理是應用程序運行結束時發生的行爲,ApplicationMaster向RM發送清理應用程序的請求,以回收資源和清理各類內存空間
ApplicationMasterLauncher啓動AM後,AM作的第一件事是向RM註冊,這是經過RPC函數ApplicationMasterProtocol#registerApplicationMaster實現的
AM運行過程當中,須要週期性地經過RPC函數ApplicationMasterProtocol#allocate與RM通訊,這主要有如下三個做用 :
-
請求資源
-
獲取新分配的資源
-
造成周期性心跳,告訴RM本身還活着
AM運行結束後,須要經過RPC函數ApplicationMasterProtocol#finishApplicationMaster告訴RM本身運行結束,能夠回收資源和清理各類數據結果了
NodeManager管理部分主要由三個服務構成,分別是NMLivelinessMonitor,NodesListManager和ResourceTrackerService,它們共同管理NodeManager的生命週期
介紹三個服務
(1) NMLivelinessMonitor
該服務週期性的遍歷集羣中全部NodeManager,若是一個NodeManager在必定時間內未彙報心跳信息,則認爲它死掉了,它上面全部正在運行的Container將被置爲運行失敗。須要注意的是,RM不會從新執行這些Container,它只會經過心跳機制告訴對應的AM,由AM決定是否從新執行。若是須要,則AM從新向RM申請資源,而後由AM與對應的NodeManager通訊以從新運行失敗的Container
(2) NodesListManager
NodesListManager管理exlude(相似於黑名單)和inlude(相似於白名單)節點列表,這兩個列表所在的文件分別可經過yarn.resourcemanager.nodes.include-path和yarn.resourcemanager.nodes.exclude-path配置,其中,exlude節點列表可認爲是黑名單,它們不容許直接與RM通訊,而inlude節點列表可認爲是白名單。默認狀況下,這兩個列表均爲空,表示任何節點均被容許接入RM。須要注意的是,管理員可經過命令"bin/yarn rmadmin -refreshNodes"動態加載這兩個文件
(3) ResourceTrackerService
ResourceTrackerService實現了RPC協議ResourceTracker,負責處理來自各個NodeManager的請求,請求主要包括註冊和心跳兩種,其中,註冊是NodeManager啓動時發生的行爲,請求包中包含節點ID,可用的資源上限等信息;而心跳時週期性行爲,包含各個Container運行狀態,運行的Application列表,節點健康情況,而ResourceTrackerService則爲NM返回待釋放的Container列表、Application列表等
NM啓動時,它所做的第一件事是向RM註冊,這是經過RPC函數ResourceTracker#registerNodeManager實現的,註冊信息包括節點可用資源總量,對外開放的HTTP端口號等
NM啓動後,他會週期性地經過RPC函數ResourceTracker#nodeHeartbeat彙報心跳,心跳信息包含各個Container運行狀態,運行的Application列表,節點健康情況等信息,而RM則爲之返回須要釋放的Container列表,Application列表等
我天天會寫文章記錄大數據技術學習之路,另外我本身整理了些大數據的學習資料,目前所有放在個人公衆號"SmallBird技術分享",加入咱們一塊兒學習交流,而且回覆'分享'會有大數據資源驚喜等着你~