这是我参与「第四届青训营 」笔记创作活动的第16天
YARN概述
调度系统要解决的问题
- 用有限资源解决有限资源无法满足的需求时就需要调度
- 调度系统主要解决资源请求和可用资源间的映射(Mapping)问题
调度系统预达的目标
- 严格的多租户间公平、容量保障
- 调度过程的高吞吐与低延迟
- 高可靠性与高可用性保障
- 高可扩展的调度策略
- 高集群整体物理利用率
- 满足上层任务的个性化调度需求
- 任务持续、高效、稳定运行
调度系统范型
- 集中式:融合资源管理调度和任务控制
- 两层式:资源管理调度和任务控制解耦
- 共享状态式:多个调度器基于乐观并发共享全局资源视图
- 分布式:多个调度器基于先验知识进行最快调度决策
- 混合式:多种类型调度器共存,共同分配
YARN设计思想
YARN(Yet Another Resource Negotiator)是Hadoop 2.0中的调度系统,是支持多种计算框架的统一资源管理平台。
离线生态
面临的挑战
- 公平性:各租户能够公平的拿到资源运行任务
- 高性能:高调度吞吐、低调度延迟,保障资源快速流转
- 高可用:集群要具备很强的容错能力
- 大规模:单集群规模提升(原生YARN 5K)
- 高集群资源利用率
- 高任务运行质量保障
系统架构
- Resource Manager
- 资源管理和调度
- 任务生命周期管理
- 对外进行交互
- Node Manager
- 提供集群资源
- 管理Container运行
任务运行生命周期核心流程
YARN核心模块
Resource Manager
整体架构
主要职责
RM负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务。
- 与客户端交互
- 启动和管理所有AM
- 管理所有NM
- 资源管理与调度
- 组织资源(资源池)
- 组织任务(队列)
- 接收资源请求
- 分配资源
状态机管理 - RMApp状态机
- NEW_SAVING:收到任务后,创建RMAppImpl对象并将基本信息持久化
- ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源
- RUNNING:任务成功获取到资源并在节点运行
状态机管理 - RMAppAttempt
- SCHEDULED:通过合法性检查后所处的状态,开始为该任务分配资源
- ALLOCATED SAVING:收到分配的Container后,在持久化完成前所处的状态
- ALLOCATED:信息持久化完成后所处的状态
- LAUNCHED:RM的ApplicationMasterLauncher与NM通信以启动AM时所处的状态
状态机管理 - RMContainer
- RESERVED:开启资源预留时,当前节点不能满足资源请求时所处的状态
- ALLOCATED:调度器分配一个Container给AM
- ACQUIRED:Container被AM领走后的状态
- EXPIRED:AM获取到Container后,若在一定时间内未启动Container,RM会强制回收该Container
状态机管理 - RMNode
- DECOMMISSIONED:节点下线后的状态;
- UNHEALTHY:节点处于不健康状态,健康检测脚本异常或磁盘故障:
- LOST:节点超过一定时间(默认10分钟)未与RM发生心跳后所处的状态;
调度流程
- AM与RM心跳:记录资源请求
- 触发时机:节点心跳
- 找Label:获取所有队列
- 找队列:最“饥饿”队列优先
- 找任务:优先级高的任务优先
- 找资源请求:优先级高的请求优先
Node Manager
整体架构
主要职责
NM是节点代理,从AM接受命令(启停Container)并执行,通过心跳方式向RM汇报 节点状态并领取命令(清理Container)。
- 与RM交互
- 心跳汇报节点状态
- 领取RM下达的命令
- 与AM交互
- 启动容器
- 停止容器
- 获取容器状态
状态机管理 - Application
- INITING:Application初始化状态,创建工作目录和日志目录
- FINISHING CONTAINERS WAIT:调等待回收Container所占用的资源所处的状态
- APPLICATION RESOURCE CLEANINGUP:Application所有Container占用的资源被回收后所处的状态
状态机管理 - Container
- LOCALIZING:正在从HDFS下载依赖的资源
- EXITED WITH SUCCESS:Container运行脚本正常退出执行
- CONTAINER CLEANUP AFTER KILL:Container被kill后所处的状态
状态机管理 - LocalizedResource
- DOWNLOADING:资源处于下载状态
- LOCALIZED:资源下载完成
- FAILED:资源下载失败