论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
【深入浅出 Yarn 架构与实现】4-1 ResourceManager 功能 ...
【深入浅出 Yarn 架构与实现】4-1 ResourceManager 功能概述 ...
兜兜零元
金牌会员
|
2022-11-22 19:58:03
|
显示全部楼层
|
阅读模式
楼主
主题
863
|
帖子
863
|
积分
2589
前面几篇文章对 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 结构设计与实现原理》第五章
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
兜兜零元
金牌会员
这个人很懒什么都没写!
楼主热帖
clang-format的使用
深入解析kubernetes中的选举机制 ...
Oracle调度器Scheduler
数据库的建立、增、删、改、查 ...
【黄啊码】MySQL入门—4、掌握这些数据 ...
MySQL安装配置
2万多条健康网站文章大全ACCESS\EXCEL ...
【黄啊码】MySQL入门—5、数据库小技巧 ...
看问题和做事情
V Rising 服务器搭建
标签云
挺好的
服务器
快速回复
返回顶部
返回列表