ApplicationMaster管理部分主要由三個服務構成,分別是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService,它們共同管理應用程式的ApplicationMaster的生命周期 Application ...
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移除對它的心跳監控
- 如果ApplicationMasterLauncher收到了"LAUNCH"類型的事件,它會與對應的NodeManager通信,要求它啟動ApplicationMaster。整個過程比較簡單,首先創建一個ContainerManagementProtocol協議的客戶端,然後向對應的NodeManager發起連接請求,接著將啟動AM所需的各種信息,包括啟動命令、JAR包、環境變數等信息,封裝成一個StartContainerRequest對象,然後通過RPC函數ContainerManagementProtocol#startContainer發送給對應的NM
- 如果ApplicationMasterLauncher收到了"CLEANUP"類型的事件,它與對應的NodeManager通信,要求它殺死ApplicationMaster。整個過程與啟動AM的過程類似
- 請求資源
- 獲取新分配的資源
- 形成周期性心跳,告訴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技術分享",加入我們一起學習交流,並且回覆'分享'會有大數據資源驚喜等著你~