概述
NodeManager是运行在单个节点上的代理,它须要与应用程序的的ApplicationMaster和集群管理者ResourceManager交互: 从ApplicationMaster上接收有关Container的命令并执行之(好比启动,中止Container); 向ResourceManager汇报各个Container运行状态和节点健康情况,并领取有关Container的命令(好比清理Container)执行之node
NodeManager是YARN中单个节点上的代理,它管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通讯,管理Container的生命周期,监控每一个Container的资源使用(内存,CPU等)状况,追踪节点健康情况,管理日志和不一样应用程序用到的附属服务安全
NodeManager基本职能
NodeManager需经过两个RPC协议与ResourceManager服务和各个应用程序的ApplicationMaster交互
架构
ResourceTrackerProtocol协议
NodeManager经过该RPC协议向ResourceManager注册,汇报节点健康情况和Container运行状态,并领取ResourceManager下达的命令,包括从新初始化,清理Container占用资源等.在该RPC协议中,ResourceManager扮演RPC Server的角色,而NodeManager扮演RPC Client的角色框架
ResourceTrackerProtocol协议主要提供了如下两个RPC函数
(1) registerNodeManager异步
NodeManager启动时经过该RPC函数向ResourceManager注册,注册信息由RegisterNodeManagerRequest封装的,包括以下三部份内容 :函数
- httpPort : 该NodeManager对外提供的HTTP端口号,ResourceManager会在界面上提供一个可直接访问NodeManager Web界面的超连接
- nodeId : 该NodeManager所在的host和对外的RPC端口号
- totalResource : 该NodeManager所在节点总的可分配资源,当前支持内存和虚拟CPU两种资源,管理员可经过参数yarn.nodemanager.resource.cpu-vcores和yarn.nodemanager.resource.memory-mb配置
ResourceManager将经过registerNodeManager函数向NodeManager返回一个RegisterNodeManagerResponse类型的对象,主要包含如下信息 :oop
- MasterKey : 新生成的Container Token和Node Token的Master Key
- NodeAction : ResourceManager向该NodeManager返回的下一步操做,主要包括NORMAL,RESYNC,SHUTDOWN三种,分别表示正常,从新同步信息和中止运行
- rmIdentifier : ResourceManager的标示符,NodeManager经过该标识符判断ApplicationMaster发送的Container来自原始的仍是新启动的ResourceManager
- diagnosticsMessage : NodeManager注册失败时,将收到一段诊断信息,告知具体的失败缘由
(2) nodeHeartbeat性能
NodeManager启动后,按期经过该RPC函数向ResourceManager汇报Container运行信息和节点健康情况,并领取新的命令,好比杀死一个Container学习
ContainerManagementProtocol协议
应用程序的ApplicationMaster经过该RPC协议向NodeManager发起针对Container的相关操做,包括启动Container,杀死Container,获取Containerspa
ContainerManagementProtocol协议主要提供了如下三个RPC函数 :
- startContainer : ApplicationMaster经过该RPC要求NodeManager启动一个Contaienr.该函数有一个StartContainerRequest类型的参数,封装了Container启动所需的本地资源,环境变量,执行命令,Token等信息.若是Container启动成功,则该函数返回一个StartContainerResponse对象
- stopContainer : ApplicationMaster经过该RPC要求NodeManager中止(杀死)一个Container.该函数有一个StopContainerRequest类型的参数,用于指定待杀死的Container ID.若是Container被成功杀死,则该函数返回一个StopContainerResponse对象
- getContainerStatus : ApplicationMaster经过该RPC获取一个Container的运行状态.该函数参数类型为GetContainerStatusRequest,封装了目标Container的ID,返回值为封装了Container当前运行状态的类型为GetContainerStatusResponse的对象
NodeManager内部架构
NodeManager内部组织结构和主要模块
- NodeStatusUpdater : NodeStatusUpdater是NodeManager与ResourceManager通讯的惟一通道
- ContainerManager : ContainerManager是NodeManager中最核心组件之一,它由多个子组件构成,每一个子组件负责一部分功能,协做共同管理运行在该节点上的全部Container.各个子组件以下
- RPC Server : 该RPC Server实现了ContainerManagementProtocol协议,是ApplicationMaster与NodeManager通讯的惟一通道
- ResourceLocalizationService : 负责Container所需资源的本地化.它可以按照描述从HDFS上下载Container所需的文件资源,并尽可能将它们分摊到各个磁盘上以防止出现访问热点.此外,它会为下载的文件添加访问控制限制,并为之施加合适的磁盘空间使用份额
- ContainersLauncher : 维护了一个线程池以并行完成Container相关操做,好比启动或者杀死Container,其中启动Container请求是由ApplicationMaster发起的,而杀死Container请求则可能来自ApplicationMaster或者ResourceManager
- AuxServices : NodeManager容许用户经过配置附属服务的方式扩展本身的功能,这使得每一个节点能够定制一些特定框架须要的服务
- ContainersMonitor : ContainersMonitor负责监控Container的资源使用量
- LogHandler : 一个可插拔组件,用户可经过它控制Container日志的保存方式,便是写到本地磁盘上仍是将其打包后上传到一个文件系统中
- ContainerEventDispatcher : Container事件调度器,负责将ContainerEvent类型的事件调度给对应Application的状态机ApplicationImpl
- ApplicationEventDispatcher : Application事件调度器,负责将ApplicationEvent类型的事件调度给对应Application的状态机ApplicationImpl
- ContainerExecutor : ContainerExecutor可与底层操做系统交互,安全存放Container须要的文件和目录,进而以一种安全的方式启动和清除Container对应的进程
- NodeHealthCheckerService : NodeHealthCheckerService经过周期性地运行一个自定义脚本和向磁盘写文件检查节点的健康情况,并将之经过NodeStatusUpdater传递给ResourceManager
- DeletionService : NodeManager将文件删除功能服务化,即提供一个专门的文件删除服务异步删除失效文件,这样可避免同步删除文件带来的性能开销
- Security : 安全模块是NodeManager中的一个重要模块,包含两部分
- ApplicationACLsManager : NodeManager须要为全部面向用户的API提供安全检查,如在Web UI上只能将Container日志显示给受权用户.该组件为每一个应用程序维护了一个ACL列表,一旦收到相似请求后会利用该列表对其进行验证
- ContainerTokenSecretManager : 检查收到的各类访问请求的合法性,确保这些请求操做已被ResourceManager受权
- WebServer : 经过Web界面向用户展现该节点上全部应用程序运行状态,Container列表,节点健康状态和Container产生的日志等信息

我天天会写文章记录学习之路,另外我本身整理了些学习资料,目前所有放在个人公众号"SmallBird技术分享",加入咱们一块儿学习交流,而且回复’分享’会有各类技术资源惊喜等着你~