Hadoop技术内幕_YARN--ResourceManager
与MRv1一样,YARN也采用了Master/Slaver结构,Master实现为ResourceManager,负责整个集群资源的管理和调度;Slave实现为NodeManager,负责整个节点的资源管理与任务启动
ResourceManager基本职能
![](https://img.haomeiwen.com/i6116404/1578430c37c63dcf.png)
概况起来,ResourceManager主要完成以下几个功能:
- 与客户端交互,处理来自客户端的请求
- 启动和管理ApplicationMaster,并在它运行失败时重新启动它
- 管理NadeManager,接受来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死Container等)
- 资源管理和调度,接受来自ApplicationMaster的资源申请请求,并为之分配资源
ResourceManager内部结构
![](https://img.haomeiwen.com/i6116404/11ad95b3850ef188.png)
用户交互模块
- ClientRMService:是为普通用户提供的服务,它处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序 、获取应用程序运行状态等
- AdminService:是管理员提供的一套独立接口
- WebApp:为了更加友好地展示集群资源使用情况和应用程序运行状态等信息,YARN对外提供了一个Web界面
NM管理模块
- NMLivelinessMonitor:监控NM是否活着
- NodesListManager: 维护正常节点和异常节点列表
- ResourceTrackerService: 处理来自NodeManager的请求,主要包括注册和心跳两种请求
AM管理模块
- AMLivelinessMonitor:监控AM是否活着
- ApplicationMasterLauncher:与某个NodeManager通信,要求它为某个应用程序启动ApplicationMaster
- ApplicationMasterService(AMS):处理来自AM的请求,主要包括注册和心跳两种请求
Application管理模块
- ApplicationACLsManager:管理应用程序访问权限
- RMAppManager 管理应用程序的启动和关闭
- ContainerAllocationExpirer::当AM收到RM新分配的一个Container后,必须在一定时间内在对应的NM上启动该Container
状态机管理模块:ResourceManager使用有限状态机维护有状态对象的生命周期,共维护了4类状态机:RMApp、RMAppAttempt、RMContainer、RMNode(这几个均是接口,具体实现类为对应接口名加上Impl后缀)
- RMApp:维护了一个应用程序的整个运行周期
- RMAppAttempt:一个应用程序可能启动多个实例,维护了一次运行尝试的整个声明周期
- RMContainer:维护了一个Container的运行周期
- RMNode:RMNode维护了一个NodeManager的声明周期
安全管理模块:RM自带了非常全面的权限管理机制,主要由ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager
资源分配模块
该模块主要涉及一个组件--ResourceScheduler,是资源调度器,它按照一定的约束条件将集群中的资源分配给各个应用程序,当前主要考虑内存和CPU资源
ResourceManager事件与事件处理器
![](https://img.haomeiwen.com/i6116404/ad82a972b5b76381.png)
![](https://img.haomeiwen.com/i6116404/5edf5fd0e3c93de1.png)
![](https://img.haomeiwen.com/i6116404/4959b826b114a20c.png)
用户交互模块
ClientRMService
是一个RPC服务,为来自客户端的各种RPC请求提过服务,实现了一个ApplicationClientProtocol协议的服务
保留了一个RM上下文对象RMContext,通过该对象可获知RM中绝大部分信息,包括节点列表、队列组织、应用程序列表等
AdminService
也是一个RPC Server,但它的服务对象是管理员
ApplicationMaster管理
由三个服务组成,分别是ApplicationMasterLauncher、AMLivelinessMonitor、ApplicationMasterService,它们共同管理应用程序的ApplicationMaster的生命周期
![](https://img.haomeiwen.com/i6116404/9c10891c999a4d95.png)
AMLivelineMonitor启动心跳监控
NodeManager管理
主要由三个服务组成,分别是NMLivelinessMonitor、NodesListManager、ResourceTrackerService,它们共同管理NodeManager的生命周期
NMLivelinessMonitor管理着AM的container
NodesListManager管理exlude(类似于黑名单)和include(类似于白名单)节点列表
ResourceTrackerService实现了RPC协议ResourceTracker,负责处理来自各个NodeManager的请求,请求主要包括注册 和心跳两种
Application管理
YARN中Application管理涉及应用程序的权限管理、启动与关闭、生命周期管理等
- ApplicationACLsManager负责管理应用程序的管理权限,包含两部分权限:查看权限和修改权限
- RMAppManager负责应用程序的启动和关闭
- ContainerAllocationExpirer
状态机管理
在YARN中,如果一个对象由若干个状态以及触发这些状态发生转移的事件构成,它将被抽象成一个状态机,在YARN ResourceManager内部,共有4类状态机,分别是RMApp、RMAppAttempt、RMContainer和RMNode,其中前两类状态机维护了一个应用程序的生命周期,RMContainer则维护了分配出去的各个资源的使用状态;RMNode维护了一个NodeManager(一个节点上可以有多个NodeManager)的生命周期
![](https://img.haomeiwen.com/i6116404/03eab954b6ff76d6.png)
RMContainer状态机
![](https://img.haomeiwen.com/i6116404/2bd6c0efa883f865.png)