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

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

时间2025-06-20 06:33:27分类IT科技浏览4908
导读:前面几篇文章对 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
熵权法python(python实现信息熵的计算代码)