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技术分享",加入咱们一块儿学习交流,而且回复'分享'会有大数据资源惊喜等着你~