Hadoop 资源管理框架 YARN : ResourceManager
Posted 东海陈光剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop 资源管理框架 YARN : ResourceManager相关的知识,希望对你有一定的参考价值。
ResourceManager 核心功能
集群资源统一管理和调度
- NodeManager(管理):接受资源汇报信息
- ApplicationMaster(管理):分配资源
- 客户端(响应):处理请求
通信 (三个角色通信)
1. 与NodeManager通信(ResourceTracker )
- 注册、心跳(汇报节点健康状况)、Container运行状态
- 领取执行指令(启动/清理/删除Container)
2. 与ApplicationMaster通信(ApplicationMasterProtocol)
- 注册、心跳
- 申请/释放资源
3. 与客户端通信(ApplicationClientProtocol)
- 提交/查询/控制应用程序
模块简介
七个模块
1. 用户交互模块
- ClientRMService:处理普通用户的请求(提交、终止程序以及查询程序状态等)
- AdminService:处理管理员的请求(更新节点/ACL列表、更新队列信息等)
防止大量的普通用户请求导致管理命令饿死。 - WebApp:通过Web页面展示集群资源使用情况和程序使用情况
2. NM管理模块
- NMLivelinessMonitor:监控NM状态
若没有定期(默认10min)汇报心跳,则从集群中移除。 - NodesListManager:维护正常节点和异常节点列表
两个列表都是在配置文件中设置的,可动态加载。 - ResourceTrackerService:处理NM的请求
3. AM管理模块
- AMLivelinessMonitor:监控AM状态
若没有定期(默认10min)汇报心跳,则认为它死掉了,它上面运行的Container都被置为失败状态。AM会被重新分配到另一个节点上执行(用户指定重试次数,默认为2) - ApplicationMasterLauncher:与NM进行通信,下发命令启动ApplicationMaster
- ApplicationMasterService(AMS):处理来自AM的请求
注册:ApplicationMaster启动节点对外RPC端口号和tackingURL等信息
心跳:汇报所需资源描述、待释放的Container列表、黑名单列表等
返回值是新分配的Container、失败的Container、待抢占的Container列表等信息
4. Application管理模块
- ApplicationACLsManager:管理应用程序访问权限
查看权限:查看应用程序基本信息
修改权限:修改程序优先级、杀死应用进程等 - RMAppManager:管理应用程序的启停
- ContainerAllocationExpirer:决定Container是否被回收以及执行
当AM收到RM新分配的Container后,必须在一定时间内(默认10min)在对应的NM启动该Container,否则RM将强制回收该Container
5. 状态机模块
将设计架构变得更清晰
- RMApp:维护一个应用程序的生命周期
- RMAppAttempt:维护MRApp产生的小任务生命周期
- RMContainer:维护Container的生命周期
目前的Container不支持重用,看看后期是否可重用 - RMNode:维护NodeManager的生命周期
6. 安全模块
由以下子模块组成
- ClientToAMSecretManager
- ContainerTokenSecretManager
- ApplicationTokenSecretManager
7. 资源分配模块
ResourceScheduler:负责将资源分配给应用程序
- 批处理资源调度器:FIFO
- 多用户调度器:Fair Scheduler和Capacity Scheduler
模块详解七个模块
1. 用户交互模块
ClientRMService和AdminService两个服务分别处理普通用户和管理员的请求
ClientRMService
本质是RPC Server(实现ApplicationClientProtocol),给客户端提供RPC服务
- ClientRMService中保留了RM上下文对象RMContext,中央异步调度器
通过RMContext来获取节点列表、队列组织和应用列表等信息来响应客户端请求
AdminService
本质也是RPC Server,不过服务对象是管理员
yarn.admin.acl设置的,默认是*,表示所有用户都是管理员
2. NM管理模块
由以下三个组件共同组成NMLivelinessMonitor
周期性遍历所有NM,它上面所有的Container都认为是失败的
心跳周期 (默认十分钟):yarn.nm.liveness-monitor.expiry-interval-ms
NodesListManager
管理RM的节点
指定白名单文件:yarn.resourcemanager.nodes.include-path
指定黑名单文件:yarn.resourcemanager.nodes.exclude-path
在执行以下命令让配置生效 bin/yarn rmadmin -refreshNodes
ResourceTrackerService
本质是RPC Server,处理NM请求(通过ApplicationMasterProtocol协议)
- 注册(单次)
NM启动时发送该请求,携带节点ID、可用资源的上限和对外开放的HTTP端口 - 心跳(周期)
包含运行的Application列表、节点健康状况和Container运行状态等
返回待释放的Container列表、Application列表
3. AM管理模块
由以下三个组件共同组成
ApplicationMasterLauncher:负责启动AM
ApplicationMasterService:负责跟AM通信
AMLivelinessMonitor:负责监控AM的生命周期
ApplicationMasterLauncher
即是服务也是事件处理器,响应AMLauncherEvent事件(启动/清理AM)
- 启动AM
通过ContainerManagementProtocol跟NM通信,将启动AM所需的信息如启动命令、JAR包、环境变量等信息封装成StartContainerRequest对象发送给NM - 清理AM
通过ContainerManagementProtocol跟NM通信,要求其杀死AM
ApplicationMasterService
处理AM的请求(通过ApplicationMasterProtocol协议)
- 注册(单次)
AM启动时发送该请求,携带所在节点、RPC端口和trackingURL等信息 - 心跳(周期)
包含请求资源的类型、待释放的Container列表等
AMS返回新分配的Container、失败的Container等信息 - 清理(单次)
AM向RM发送清理请求,来回收/清理各种资源
回收AM所占的Container和将AM从AMLivelinessMonitor中删除
AMLivelinessMonitor
周期性遍历所有AM,如果有AM没有定期发送心跳则认为它挂了,它所持有的Container全部设置为失败
RM会重新为它分配资源并在另一个节点上启动
心跳时间 (默认十分钟):yarn.am.liveness-monitor.expiry-interval-ms
AM失败重试次数 (默认两次):yarn.resourcemanager.am.max-attempts
4. Application管理模块
管理Application的生命周期、权限等
ApplicationACLsManager
管理应用程序查看/修改权限
通过该参数配置权限 yarn.admin.acl
RMAppManager
负责应用程序的启停
- 将应用程序放到应用程序列表中
- 将应用程序从RMStateStore中移除
通过该参数设置最大应用数:yarn.resourcemanager.max-completed-applications
ContainerAllocationExpirer
管理Container的使用
如果某个AM拿到Container后一段时间内都没使用,则会强制回收(提高利用率)
等待时间 :yarn.resourcemanager.rm.container-allocation.expiry-interval-ms
特点
1. 事件驱动
中央异步调度器将组件/服务组织在一起,各个组件/服务的输出都是事件,组件/服务之间的交互都是通过事件,从而实现了异步并行的高效系统
以上是关于Hadoop 资源管理框架 YARN : ResourceManager的主要内容,如果未能解决你的问题,请参考以下文章
对Hadoop2.7.2文档的学习-Yarn部分RM Restart/RM HA/Timeline Server/NM Restart