首页IT科技yarn基本架构(【深入浅出 Yarn 架构与实现】4-1 ResourceManager 功能概述)

yarn基本架构(【深入浅出 Yarn 架构与实现】4-1 ResourceManager 功能概述)

时间2025-07-31 12:10:57分类IT科技浏览5568
导读:前面几篇文章对 Yarn 基本架构、程序基础库、应用设计方法等进行了介绍。之后几篇将开始对 Yarn 核心组件进行剖析。 ResourceManager(RM)是 Yarn 的核心管理服务,负责集群管理、任务调度、状态机管理等,本篇将对 RM 总体架构进行介绍。...

前面几篇文章对 Yarn 基本架构              、程序基础库                     、应用设计方法等进行了介绍             。之后几篇将开始对 Yarn 核心组件进行剖析                    。

ResourceManager(RM)是 Yarn 的核心管理服务              ,负责集群管理      、任务调度          、状态机管理等                     ,本篇将对 RM 总体架构进行介绍        。

一                      、RM 基本职能

主要包含以下几个功能:

Client 交互:处理来自 Client 的请求; 管理 ApplicationMaster:启动         、管理      、重启等; 管理 Nodemanager:接收 NM 汇报的资源信息      ,并下达管理指令; 资源管理与调度:接收 AM 的资源请求          ,并分配资源          。

如上图所示                      ,RM 中各组件通过对应 RPC 与各 Client 进行通信:

ResourceTrackerProtocol: NodeManager(NM)通过该 RPC 协议向 RM 注册                      、汇报节点健康状况和 Container 运行状态         ,并领取 RM 下达的命令                   。NM 与 RM 之间采用了「pull模型」      ,NM 总是周期性地主动向 RM 发起请求(心跳)                      ,并领取下达给自己的命令            。 ApplicationMasterProtocol: 应用程序的 ApplicationMaster 通过该 RPC 协议向 RM 注册            、申请资源和释放资源       。(AM 与 RM 交互参考上一篇文章「3-3 Yarn Application Master 编写」) ApplicationClientProtocol: 应用程序的客户端通过该 RPC 协议向 ResourceManager 提交应用程序   、查询应用程序状态和控制应用程序(比如杀死应用程序)等                  。(AppClient 与 RM 交互参考文章「3-2 Yarn Client 编写」

从以上介绍中可以看出            ,与 RM 通过 RPC 通信的组件都采用「Pull 模型」   ,各个「Client」通过心跳定期向 RM 汇报                      ,在心跳返回值中领取 RM 下达的指令               。

二                      、RM 内部架构

本节将深入 RM 内部                ,看其内部组织结构和主要模块,架构图如下所示:

一)用户交互模块

RM 分别针对普通用户                、管理员和 Web 提供了三种对外服务:

ClientRMService: 为普通用户提供的服务                  ,它处理来自客户端各种RPC请求                    ,比如提交应用程序、终止应用程序                  、获取应用程序运行状态等; AdminService: RM 为管理员提供了一套独立的服务接口   ,以防止管理员发送的管理命令饿死              ,管理员可通过这些接口管理集群                     ,比如动态更新节点列表                    、更新ACL列表   、更新队列信息等; WebApp: 更加友好地展示集群资源使用情况和应用程序运行状态等信息    。

二) NM 管理模块

NMLivelinessMonitor: 监控 NM 是否活着      ,长时间(默认为10min)内未汇报心跳信息          ,则认为其挂了; NodesListManager: 维护正常节点和异常节点列表                      ,管理exclude(类似于黑名单)和include(类似于白名单)节点列表         ,这两个列表均是在配置文件中设置的      ,可以动态加载; ResourceTrackerService: 处理来自 NM 的请求                      ,主要包括注册和心跳两种请求                   。

三) AM 管理模块

AMLivelinessMonitor: 监控AM是否活着            ,长时间未汇报心跳   ,它上面所有正在运行的 Container 将被置为失败状态                      ,而 AM 本身会被重新分配到另外一个节点上执行(AM 重试次数默认是2); ApplicationMasterLauncher: 与某个 NM 通信                ,要求它为某个应用程序启动 ApplicationMaster; ApplicationMasterService(AMS): 处理来自 AM 的请求,主要包括注册和心跳两种请求                  。其中心跳汇报信息包含所需资源描述              、待释放的Container列表                     、黑名单列表等                  ,而 AMS 则为之返回相应的 Container 信息。

四) Application 管理模块

ApplicationACLsManage: 管理应用程序访问权限                    ,包含两部分权限:查看权限和修改权限; RMAppManager: 管理应用程序的启动和关闭; ContainerAllocationExpirer: 当 AM 收到 RM 新分配的一个 Container 后   ,必须在一定的时间内启动该 Container              ,否则将被回收                。

五)状态机管理模块

RM 共维护四类状态机:

RMApp: 维护一个 Application 的整个运行周期                     ,可能会包括多次 Attempt; RMAppAttempt: 一个实例运行失败后      ,可能再次启动一个重新运行          ,而每次启动称为一次运行尝试用 「RMAppAttempt」描述                      ,RMAppAttempt 维护了一次运行尝试的整个生命周期; RMContainer: 维护一个 Container 的运行周期                     。RM 将资源封装成 Container 发送给应用程序的 AM         ,而AM 则会在 Container 中启动任务; RMNode: 维护一个 NM 的生命周期      ,包括启动到运行结束整个过程    。

六)安全管理模块

RM 有非常全面的权限管理机制                      ,主要包括:

ClientToAMSecretManager ContainerTokenSecretManager ApplicationTokenSecretManager

七)资源分配模块

该模块主要涉及一个组件「ResourceScheduler」             。其是资源调度器            ,按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序                    。

ResourceScheduler 是一个插拔式模块   ,自带三个调度器                      ,用户可以自己定制: FIFO:先进先出                ,单用户 Fair Scheduler:公平调度器(FairScheduler基本上具备其它两种的所有功能) Capacity Scheduler:容量调度器

此部分将在后面文章中更详细的介绍        。

三      、RM事件与事件处理器

Yarn采用了事件驱动机制,而RM是的实现则是最好的例证          。所有服务和组件均是通过中央异步调度器组织在一起的                  ,不同组件之间通过事件交互                    ,从而实现了一个异步并行的高效系统                   。

下面是详细的表格:

四          、小结

在 YARN 中   ,ResourceManager 负责集群中所有资源的统一管理和分配              ,它接收来自各个节点(NodeManager)的资源汇报信息                     ,并把这些信息按照一定的策略分配给各个应用程序            。

本篇对 ResourceManager 总体架构进行了介绍       。对其基本职能                      、内部结构         、处理的事件进行了梳理                  。后续文章中将会对每个部分深入源码进行更深入讨论               。

参考文章:

《Hadoop 技术内幕 - 深入解析 Yarn 结构设计与实现原理》第五章

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
seo网站优化详解怎么写(88个seo网站优化基础知识点) vscode插件安装教程(vscode安装教程(含插件配置))