这是我参与「第四届青训营 」笔记创作活动的第15天
Yarn概述
调度系统解决的问题
- 用有限资源解决有限资源无法满足的需求时就需要调度;
- 调度系统主要解决资源请求和可用资源间的映射(Mapping)问题;
调度系统预达的目标
- 严格的多租户间公平、容量保障
- 调度过程的高吞吐与低延迟
- 高可靠性与高可用性保障
- 高可扩展的调度策略
- 高集群整体物理利用率
- 满足上层任务的个性化调度需求
- 任务持续、高效、稳定运行
调度系统范型
-
集中式
- 融合资源管理调度和任务控制
-
两层式
- 资源管理调度和任务控制解耦
-
共享状态式
- 多个调度器基于乐观并发共享全局资源视图
-
分布式
- 多个调度器基于先验知识进行最快调度决策
-
混合式
- 多种类型调度器共存,共同分配
YARN面临挑战
- 公平性:各租户能够公平的拿到资源运行任务
- 高性能:高调度吞吐、低调度延迟,保障资源快速流转
- 高可用:集群要具备很强的容错能力
- 大规模:单集群规模提升(原生YARN 5K)
- 高集群资源利用率
- 高任务运行质量保障
Yarn核心模块
Resource Manager
主要职责
RM负责集群所有资源的统一管理和分配, 接收各节点汇报信息并按照一定策略分配给各个任务。
-
与客户端交互
-
启动和管理所有AM
-
管理所有NM
-
资源管理与调度
- 组织资源(资源池)
- 组织任务(队列)
- 接收资源请求
- 分配资源
Resource Manager状态机管理
- NEW SAVING:收到任务后,创建RMApplmpl对象并将基本信息持久化;
- ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源;
- RUNNING:任务成功获取到资源并在节点运行;
- SCHEDULED:通过合法性检查后所处的状态,开始为该任务分配资源;
- ALLOCATED_SAVING:收到分配的Container后,在持久化完成前所处的状态;
- ALLOCATED:信息持久化完成后所处的状态;
- LAUNCHED: RM的ApplicationMasterLauncher 与 NM通信以启动AM时所处的状态;
- RESERVED:开启资源预留时,当前节点不能满足资源请求时所处的状态;
- ALLOCATED:调度器分配一个 Container给AM;
- ACQUIRED: Container 被AM领走后的状态;
- EXPIRED:AM获取到Container后,若在一定时间内未启动Container,RM会强制回收该Container;
- DECOMMISSIONED:节点下线后的状态;
- UNHEALTHY:节点处于不健康状态,健康检测脚本异常或磁盘故障;
- LOST:节点超过一定时间(默认10分钟)未与RM发生心跳后所处的状态;
Resource Manager调度器分析
调度流程
- AM与RM心跳:记录资源请求
- 触发时机:节点心跳
- 找Label:获取所有队列
- 找队列:最“饥饿”队列优先
- 找任务:优先级高的任务优先
- 找资源请求:优先级高的请求优先
Node Manager主要职责
NM是节点代理,从AM接受命令(启停Container) 并执行,通过心跳方式向RM汇报节点状态并领取命令(清理Container)
-
与RM交互
- 心跳汇报节点状态
- 领取RM下达的命令
-
与AM交互
- 启动容器
- 停止容器
- 获取容器状态
重要机制
Fair Share
什么是
- 所有队列Fair Share之和<= TotalResource;
- S.minShare <= Fair Share <= S.maxShare;
为什么需要
- 实现队列间资源共享,提高资源利用率;
- 缓解繁忙队列压力;
Fair Share类型
- Steady Fair Share
- Instantaneous Fair Share