这是我参与「第四届青训营 」笔记创作活动的第12天
1. YARN概述
1.1 调度系统的演进(背景)
- IT到DT时代的变革,注重数据价值
- 数据计算方式的变革,注重计算效率
- 企业对外服务需数以万计的硬件资源
- 灵活调度、提高利用率是降本增效的关键
1.2.1 调度系统的演进(解决的问题)
- 用有限资源解决有限资源无法满足的需求时就需要调度
- 调度系统主要解决资源请求和可用资源间的映射的问题
1.2.2 调度系统的演进(预期的目标)
- 严格的多租户间公平、容量保障
- 调度过程的高吞吐与低延迟
- 高可靠性与高可用性保障
- 高可扩展的调度策略
- 高集群整体物理利用率
- 满足上层任务的个性化调度需求
- 任务持续、高效、稳定运行
1.3 YARN
1.3.1 YARN设计思想
Hadoop 1.0:
- 可扩展性差
- 可靠性差
- 资源利用率低
- 无法支持多种计算框架
Hadoop 2.0:
- 资源管理和任务控制解耦
- Yarn(Yet Another Resource Negotiator)支持多种计算框架的统一资源管理平台
1.3.2 Yarn离线生态
1.3.3 Yarn面临的挑战
- 公平性:各租户能够公平的拿到资源运行任务
- 高性能:高调度吞吐、低调度延迟、保障资源快速流转
- 高可用:集群具备很强的容错能力
- 大规模:单集群规模提升(原生YARN 5K)
- 高集群规模资源利用率
- 高任务运行质量保障
1.4 YARN整体架构
ResourceManager:
- 资源管理和调度
- 任务生命周期管理
- 对外进行交互
NodeManager:
- 提供集群资源
- 管理Container运行
2 Yarn核心模块
2.1 ResourceManager整体架构
RM负责集群所有资源的统一管理和分配,接收个节点汇报信息并按照一定策略分配给各个任务
RMApp 状态机:
- NEW_SAVING:收到任务后,创建RMAppImpl对象并将基本信息持久化
- ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源
- RUNNING:任务成功获取到资源并在节点运行
调度流程:
- AM与RM心跳:记录资源请求
- 触发时机:节点心跳
- 找Label:获取所有队列
- 找队列:最饥饿队列优先
- 找任务:优先级高的任务优先
- 找资源请求:优先级高的请求优先
调度器:
2.2 NodeManager
NM是节点代理,从AM接受命令并执行,通过心跳的方式向RM汇报节点状态并领取命令。
与RM交互:
- 心跳汇报节点状态
- 领取RM下达的命令
与AM交互
- 启动容器
- 停止容器
- 获取容器状态
3 重要机制
3.1 调度策略——Fair Share
Fair Share:
队列空闲时按照一定策略将资源分配给其他活跃队列。
目的:
- 实现队列间资源共享,提高资源利用率
- 缓解繁忙队列压力
Fair Share类型:
- Stead Fair Share
- Instantaneous Fair Share
3.2 调度策略——DRF(Dominant Resource Fair)
DRF:
DRF是最大最小公平算法在多维资源上的具体体现,旨在使不同用户的“主分享量”最大化的保持公平
目的:
在保证公平的前提下进行资源降维
3.3 容错机制——高可用性
RM高可用
- 热备方案:Active Master提供服务、Standby Master作为备节点
- 基于共享内存的HA解决方案:关键信息写入共享存储系统(ZK)
NM高可用
- 关键信息存储至leveldb数据库
- 重启时从yarn-nm-recovery下的leveldb数据库加载数据