共计 2608 个字符,预计需要花费 7 分钟才能阅读完成。
后面几篇文章对 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 结构设计与实现原理》第五章