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

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

时间2025-09-17 11:51:01分类IT科技浏览6228
导读:前面几篇文章对 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
平乡县新闻网(平乡县网) macos u盘格式化(Mac系统下对U盘进行格式化图文攻略)