ResourceManager的功能结构如下图所示:
1.ApplicationMaster管理
ResourceManager有三个组件用于管理提交到Yarn上所有应用的ApplicationMaster。
1.1.ApplicationMasterLauncher
ApplicationMasterLauncher 既是一个服务,也是一个事件处理器,它处理 AMLauncherEvent 类型的事件,该类型事件有两种:
(1)请求启动一个 ApplicationMaster 的 "LAUNCH" 事件
(2)请求清理一个 ApplicationMaster 的 "CLEANUP" 事件。
ApplicationMasterLauncher 维护了一个线程池,从而能够尽快地处理这两种事件。
1.2.AMLivelinessMonitor
该服务周期性遍历所有应用程序的 ApplicationMaster,如果一个ApplicationMaster 在一定时间(可通过参数yarn.am.livenessmonitor.expiry-interval-ms 配置,默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的 Container 将被置为运行失败。
1.3.ApplicationMasterService
ApplicationMasterService 实现了RPC协议 ApplicationMasterProtocol,负责处理来自 ApplicationMaster 的请求,请求主要包括注册、心跳和清理三种。
1.4.ApplicationMaster管理机制
通过下图来简单解释ApplicationMaster的生命周期。
整个生命周期有7个步骤。
(1)startContainer
用户向 YARN ResourceManager 提交应用程序,ResourceManager 收到提交请求后,先向资源调度器申请用以启动 ApplicationMaster 的资源,待申请到资源后,再由 ApplicationMasterLauncher 与对应的 NodeManager 通信,从而启动应用程序的 ApplicationMaster。
(2)add ApplicationMaster
ApplicationMaster 启动完成后,ApplicationMasterLauncher 会通过事件的形式,将刚刚启动的 ApplicationMaster 注册到 AMLivelinessMonitor 以启动心跳监控。
(3)registerApplicationMaster
ApplicationMaster 启动后,先向 ApplicationMasterService 注册,并将自己所在 host、端口号等信息汇报给它。
(4)allocate
ApplicationMaster 运行过程中,周期性地向 ApplicationMasterService 汇报"心跳" 信息(“心跳” 信息中包含想要申请的资源描述)。
(5)updateExpireTime
ApplicationMasterService 每次收到 ApplicationMaster 的心跳信息后,将通知 AMLivelinessMonitor 更新该应用程序的最近汇报心跳的时间。
(6)finishApplicationMaster
当应用程序运行完成后,ApplicationMaster 向 ApplicationMasterService 发送请求,注销自己。
(7)remove
ApplicationMasterService 收到注销请求后,标注应用程序运行状态为完成,同时通知 AMLivelinessMonitor 移除对它的心跳监控。