1.ResourceManager 核心功能
YARN 通过分配资源和调度任务来执行所有处理活动。 Apache Hadoop YARN 架构由以下主要组件组成:
资源管理器(Resource Manager):在主守护进程上运行并管理集群中的资源分配。
节点管理器(Node Manager):它们在从属守护进程上运行,负责在每个数据节点上执行任务。
应用程序主控(Application Master):管理各个应用程序的用户作业生命周期和资源需求。它与节点管理器一起工作并监视任务的执行。
容器(Container):单个节点上的 RAM、CPU、网络、HDD 等资源的封装。
ResourceManager 的核心功能:集群资源统一管理和调度
2.通信(与三个角色通信)
与 NodeManager 通信(ResourceTracker)
注册、心跳(汇报节点健康状况)、Container 运行状态
领取执行指令(启动 / 清理 / 删除 Container)
与 ApplicationMaster 通信(ApplicationMasterProtocol)
注册、心跳
申请 / 释放资源
与 客户端 通信(ApplicationClientProtocol)
提交 / 查询 / 控制应用程序
3.1 用户交互模块
ClientRMService:处理普通用户的请求(提交、终止程序以及查询程序状态等)。
AdminService:处理管理员的请求(更新节点 / ACL列表、更新队列信息等),防止大量的普通用户请求导致管理命令饿死。
WebApp:通过 Web 页面展示集群资源使用情况和程序使用情况。
3.2 NM 管理模块
NMLivelinessMonitor:监控 NM 状态。若没有定期(默认10min)汇报心跳,则从集群中移除。
NodesListManager:维护正常节点和异常节点列表。两个列表都是在配置文件中设置的,可动态加载。
ResourceTrackerService:处理 NM 的请求。
3.3 AM 管理模块
AMLivelinessMonitor:监控 AM 状态。若没有定期(默认10min)汇报心跳,则认为它死掉了,它上面运行的 Container 都被置为失败状态。AM 会被重新分配到另一个节点上执行(用户指定重试次数,默认为 2)。
ApplicationMasterLauncher:与 NM 进行通信,下发命令启动 ApplicationMaster。
ApplicationMasterService(AMS):处理来自 AM 的请求。
注册:ApplicationMaster 启动节点对外 RPC 端口号和 Tracking URL 等信息。
心跳:汇报所需资源描述、待释放的 Container 列表、黑名单列表等。返回值是新分配的 Container、失败的 Container、待抢占的 Container 列表等信息。
3.4 Application 管理模块
ApplicationACLsManager:管理应用程序访问权限。
查看权限:查看应用程序基本信息。
修改权限:修改程序优先级、杀死应用进程等。
RMAppManager:管理应用程序的启停。
ContainerAllocationExpirer:决定 Container 是否被回收以及执行。当 AM 收到 RM 新分配的 Container 后,必须在一定时间内(默认10min)在对应的 NM 启动该 Container,否则 RM 将强制回收该 Container。
3.5 状态机模块
RMApp:维护一个应用程序的生命周期。
RMAppAttempt:维护 RMApp 产生的小任务生命周期。
RMContainer:维护 Container 的生命周期。目前的 Container 不支持重用,看看后期是否可重用。
RMNode:维护 NodeManager 的生命周期。
3.6 安全模块
由以下子模块组成:
ClientToAMSecretManager
ContainerTokenSecretManager
ApplicationTokenSecretManager
3.7 资源分配模块
ResourceScheduler:负责将资源分配给应用程序
批处理资源调度器:FIFO
多用户调度器:Fair Scheduler 和 Capacity Scheduler
ClientRMService 和 AdminService 两个服务分别处理普通用户和管理员的请求。
ClientRMService:本质是 RPC Server(实现 ApplicationClientProtocol),给客户端提供 RPC 服务。ClientRMService 中保留了 RM 上下文对象 RMContext,中央异步调度器(AsyncDispatcher)通过 RMContext 来获取节点列表、队列组织和应用列表等信息来响应客户端请求。
AdminService:本质也是RPC Server,不过服务对象是管理员。yarn.admin.acl设置的,默认是*,表示所有用户都是管理员
4.2 NM 管理模块
由以下三个组件共同组成
NMLivelinessMonitor
当前正在运行的 NM 会保存在 RM 的一个数据结构中,NMLivelinessMonitor 就周期遍历,若一个 NM 在一定时间(默认10分钟)未汇报心跳,则认为其挂了。
心跳周期(默认十分钟):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 列表。
由以下三个组件共同组成:
ApplicationMasterLauncher:既是服务也是事件处理器,响应 AMLauncherEvent 事件(启动 / 清理 AM)
启动 AM。通过 ContainerManagementProtocol 跟 NM 通信,将启动 AM 所需的信息如启动命令、JAR 包、环境变量等信息封装成 StartContainerRequest 对象发送给 NM。
清理 AM。通过 ContainerManagementProtocol 跟 NM 通信,要求其杀死 AM。
ApplicationMasterService:负责跟 AM 通信,处理 AM 的请求(通过 ApplicationMasterProtocol 协议)
注册(单次):AM 启动时发送该请求,携带所在节点、RPC 端口和 Tracking URL 等信息。
心跳(周期):包含请求资源的类型、待释放的 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.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
5.特点
事件驱动:中央异步调度器将组件 / 服务组织在一起,各个组件 / 服务的输出都是事件,组件 / 服务之间的交互都是通过事件,从而实现了异步并行的高效系统。
————————————————