欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ResourceManager学习之ApplicationMaster,NodeManager管理

程序员文章站 2022-05-18 12:05:38
ApplicationMaster管理部分主要由三个服务构成,分别是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService,它们共同管理应用程序的ApplicationMaster的生命周期 Application ......
applicationmaster管理部分主要由三个服务构成,分别是applicationmasterlauncher、amlivelinessmonitor和applicationmasterservice,它们共同管理应用程序的applicationmaster的生命周期
 
applicationmasterlauncher、amlivelinessmonitor和applicationmasterservice这三个组件是如何协同管理applicationmaster生命周期,介绍从resourcemanager获得资源启动applicationmaster : 
  1. 用户向yarn resourcemanager提交应用程序,resourcemanager收到提交请求后,先向资源调度器申请用以启动applicationmaster的资源,待申请到资源后,再由applicationmasterlauncher与对应的nodemanager通信,从而启动应用程序的applicationmaster
  2. applicationmaster启动完成后,applicationmasterlauncher会通过事件的形式,将刚刚启动的applicationmaster注册到amlivelinessmonitor,以启动心跳监控
  3. applicationmaster启动后,先向applicationmasterservice注册,并将自己所在host、端口号等信息汇报给它
  4. applicationmaster运行过程中,周期性地向applicationmasterservice汇报心跳信息
  5. applicationmasterservice每次收到applicationmaster的心跳信息后,将通知amlivelinessmonitor更新该应用程序的最近汇报心跳的时间
  6. 当应用程序运行完成后,applicationmaster向applicationmasterservice发送请求,注销自己
  7. 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技术分享",加入我们一起学习交流,并且回复'分享'会有大数据资源惊喜等着你~