大数据理论与实践4 分布式资源管理系统YARN

YARN简介

YARN由来

Hadoop 1.x中的MapReduce存在先天缺陷,身兼两职:计算框架(称职)和资源管理系统(不称职);JobTracker同时管理资源和作业,负担重开销大;资源描述模型过于简单等问题。

什么是YARN

YARN(Yet Another Resource Negotiator):另一种资源管理器。是一个分布式通用资源管理系统。
设计目标:聚焦资源管理、通用(适用各种计算框架)、高可用(元数据和Master高可用)、高扩展(与HDFS同步扩展)、高容错(计算容错)
在大数据体系里面,YARN属于大脑一样的,没有YARN下层数据是死的,上层的功能也是没有用的。

原理

系统架构

采用Master/Slave + Active/Standby
基本思路:将JobTracker的资源管理和作业管理职能分离开来
四种角色:ResourceManager、ApplicationMaster(作业管家)、NodeManager、Client
在这里插入图片描述
Active ResourceManager

  • 活动资源管理节点(Master / 集群唯一)
  • 统一管理集群计算资源
  • 负责启动ApplicationMaster、作业指派和监控
  • 将资源按照一定的调度策略分配给作业
  • 接收NodeManager的运行状况和资源上报信息

Standby ResourceManager
热备资源管理节点(允许多个)
AR宕机后,经过Master选举和状态信息恢复,SRM升级为ARM
重启AM,杀死所有运行中的Container

ApplicationMaster(AM)
作业管家,跑在NodeManager里面,有生命周期,支持热插拔

  • 一对一管理:每个作业实例都由一个专职的AM来管理
  • 作业解析:将Job解析为由若干Task组成的有向无环图
  • 申请资源:向RM申请Job运行所需的计算资源
  • 任务调度和监管:向NM申请分配Container和启动Task,同时监测Task的运行状态和进度
  • 反馈:向Client反馈Job的运行状态和结果

NodeManager(NM)

  • 计算节点(Slave / 高扩展)
  • 管理单个节点的资源
  • 管理Container的生命周期(从创建到销毁的全过程)
  • 向ResourceManager汇报运行状况和资源使用情况

Container
容器:对进程相关资源的封装,对资源的抽象,分配资源即分配Container
分为两类:运行AM的Container 、运行Task的Container

这里要区分:Server是购买或租用的一台物理机,而节点是一个服务进程,进行计算或者存储资源管理等。将计算任务放在有数据的那台机器上。

举例:ResourceMaster是研发老总,管理很多开发团队,知道全部团队状况;Container是程序员;ApplicationMaster是一个项目团队的负责人,进行任务的分解与设计,查询一下谁有开发经验(数据block),返回给研发老总;研发老总根据实际工作情况同意之后,批文下发给负责人,负责人再把工作下发到具体程序员;在程序员工作期间,项目负责人把进度和工作情况汇报给老总。

工作机制

在这里插入图片描述

  1. Client向RM提交编译好的分布式程序(Job)
  2. RM接收Job后,分配一个NM来启动AM,并将Job指派给AM,由它来一对一管理
  3. AM将Job解析为一个由若干Task组成的有向无环图DAG,并从NameNode获取Task输入数据的存储位置(即Block存储位置),然后向RM申请计算资源
  4. 根据AM提交的Task Set及其对应的Block存储位置,RM为Job分配计算资源,即为每个Task分配一个NM List,并返回给AM
    此处计算跟着数据走:NM所在Server的DataNode上存储了Task的输入Block
  5. 根据Task DAG和NM List,AM按照并行/串行次序将Task提交给NM
  6. NM接收Task,验证身份后,启动Container,运行Task,并向AM汇报运行状态和进度
  7. 在Job运行期间,AM向Client反馈Job运行进度和状态,并返回最终结果

集群部署

计算与数据
HDFS和YARN的Master不能放在一台机器上,太危险。
热备节点可以放在一起。在向NameNode获取数据存储位置之后,再去ResourceManager获取资源分配。
这体现了计算集群和数据集群的协同。

高可用

  1. 基于ZK的元数据高可用
    RM状态、Job状态和Token(访问身份验证)
  2. 基于ZK的RM高可用(主备切换)
    Master选举、恢复RM的原有状态信息、重启AM,并杀死所有运行中的Container
  3. 计算高可用
    Task失败后,AM会把其调度到其他NM上重新执行(默认4次);Job失败后,RM会在其他NM上重启AM(默认2次)
    在分配的时候会有备用的计算节点(数据存储也是有备份的,数据跟着任务走)

YARN资源调度策略

FIFO调度器

先入先出调度器,YARN最原始的调度器。
先入先出
调度策略:将所有作业放入一个队列,先进队列的先获得资源,排在后面的作业只能等待。
缺点:资源利用率低,无法交叉运行作业;灵活性差,如紧急作业无法插队,耗时长的作业拖慢整个队列

容量调度器

Capacity Scheduler(容量调度器)
核心思想提前做预算,在预算指导下分享集群资源
容量调度器
调度策略

  • 集群资源由多个队列分享
  • 每个队列都要预设资源分配比例(提前做预算,预算是指导原则)
  • 空闲资源优先分配给“实际资源/预算资源”比值最低的队列(保持弹性)
  • 队列内部采用FIFO调度策略

特点

  • 层次化的队列设计:子队列可使用父队列资源
  • 容量保证:每个队列都要预设资源占比,防止资源独占
  • 弹性分配:空闲资源可以分配给任何队列,但当多个队列争用时,会按比例进行平衡
  • 支持动态管理:既可以动态调整队列的容量、权限等参数,也可以动态增加、暂停队列
  • 访问控制:用户只能向自己的队列中提交作业,不能访问其他队列
  • 多租户:多用户共享集群资源

公平调度器

Fair Scheduler(公平调度器)
在这里插入图片描述
调度策略

  • 多队列公平共享集群资源
  • 通过平分的方式,动态分配资源,无需预先设定资源分配比例,即“不提前做预算、见面分一半、实现绝对公平
  • 队列内部可配置调度策略:FIFO、Fair(默认)

资源抢占
终止其他队列的作业,使其让出所占资源,然后将资源分配给占用资源量少于最小资源量限制的队列(通过杀富济贫保持弹性)

队列权重
当队列中有作业等待,并且集群中有空闲资源时,每个队列可以根据权重获得不同比例的空闲资源(通过政策倾斜保持弹性)

课后温习

简述YARN与MapReduce的关系。
为什么要设计ApplicationMaster这一角色?
Zookeeper在YARN中承担了哪些功能?
简述YARN的工作机制。
在项目实践中,如何部署YARN的ResourceManager、NodeManager和HDFS的NameNode、DataNode?

参考

课程内容来自:南京大学+星环科技课程,大数据大数据理论与实践课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值