这是我参与「第四届青训营 」笔记创作活动的第23天
本次笔记重点内容
- YARN概述
- 核心模块
- 重要机制
YARN
调度系统
演进
如今我们已经由信息科技时代(IT)进化到数据科技时代(DT),注重数据价值、效率,企业对外服务需要数以万计的资源,为了能进行灵活调度、提高利用率这种降本增效的关键问题,需要调度系统来改善。当用有限资源解决有限资源无法满足的需求时就需要调度,资源资源管理与调度主要解决资源请求和可用资源的映射(Mapping) 问题。
预达目标
- 严格的多租户间公平、容量保障
- 调度过程的高吞吐与低延迟
- 高可靠性与高可用性保障
- 高可扩展的调度策略
- 高集群整体物理利用率
- 满足上层任务的个性化调度需求
- 任务持续、高效、稳定运行
调度系统范型
- 集中式:融合资源管理调度和任务控制(常用)
- 两层式:资源管理调度和任务控制解耦,调度层的压力缓解很多(常用)
- 共享状态式:一个集群中有多个调度器基于乐观并发共享全局资源调度,调度效率更高
- 分布式:一个集群中有多个调度器基于先验知识进行最快调度决策,调度很快
- 混合式:多种类型调度器共存于一个集群,共同分配
YARN设计思想
- Hadoop 1.0 时代:分布式存储系统 HDFS + 分布式计算框架 MapReduce,可扩展性和可靠性差,只能针对特定的计算框架,资源利用率低。
- Hadoop 2.0 时代:解决了 Hadoop 1.0 时代中存在的问题,实现了资源管理和任务控制解耦,支持多种不同类型计算框架。
离线生态
面临挑战
- 公平性:各租户能够公平的拿到资源运行任务
- 高性能:高调度吞吐、低调度延迟,保障资源快速流转
- 高可用:集群要具备很强的容错能力
- 单集群规模提升:原生 YARN 单集群最大支持 5K 个节点
- 高集群资源利用率
- 高任务运行质量保障
系统架构
- Resource Manager
- 负责为应用调度资源,管理应用生命周期
- 对外进行交互,对用户提供接口
- 可以同时存在多个,同一时间只有一个在工作,Resource Manager 之间通过 Zookeeper 选主
- Node Manager
- 为整个集群提供资源
- 管理Contianer的运行时生命周期
核心模块
Resource Manager
Resource Manager 负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务
- 与客户端交互,处理来自客户端的请求
- 启动和管理 Application MasterService,运行失败时自动重试
- 管理所有 Node Manager,接收 Node Manager 的汇报信息并下达管理指令
- 资源管理和调度
- 将资源按照一定方式组织起来,例如:资源池
- 将任务按照一定方式组织起来,例如:队列
- 接收来自各个 AM 的资源请求
- 按照一定分配策略将资源分配给 AM
状态机管理
RMApp状态机
- NEW_SAVING状态: 收到提交的应用程序后,创建 RMAppImpl 对象并将基本信息持久化,否则任务可能会丢失
- ACCEPTED状态:调度器接受该应用程序后所处的状态,任务等待被分配资源;
- RUNNING状态:任务成功获取到资源并在节点运行
RMAppAttempt状态机
- SCHEDULED状态: 通过 Scheduler 合法性检查后所处的状态,开始为该 App 分配资源;
- ALLOCATED_SAVING状态:收到分配的 Container 后,在持久化完成前所处的状态;
- ALLOCATED状态:信息持久化完成后所处的状态;
- LAUNCHED状态:Resource Manager 的 ApplicationMasterLauncher 与 NM 通信以启动 AM 时所处的状态;
RMContainer状态机
- RESERVED状态: 开启资源预留时,当前节点不能满足资源请求时所处的状态;
- ALLOCATED状态:调度器分配一个 Container 给 Application MasterService;
- ACQUIRED状态:Application MasterService 获取到分配的 Container 后所处的状态;
- EXPIRED状态: Application MasterService获取到 Container 后,若在一定时间内未启动 Container,Resource Manager 会强制回收该 Container;
RMNode状态机
- DECOMMSIONED状态: 节点下线后的状态;
- UNHEALTHY状态:节点处于不健康状态,健康检测脚本异常或磁盘故障;
- LOST状态:超过一定时间(默认 10 分钟)未与 Resource Manager 发生心跳后所处的状态;
Node Manager
Node Manager 是节点代理,从 Application MasterService 接受命令(启停 Container)并执行,通过心跳方式向 Resource Manager 汇报节点状态并定期清理 Container
状态机管理
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:资源下载失败;
重要机制
Fair Share 调度策略
是什么?
队列配置 minShare 和 maxShare,当队列空闲时按照一定策略将资源分配给其他活跃队列
目的?
保障公平的前提下实现队列间资源共享,提高资源利用率,缓解繁忙队列压力
DRF 调度策略
目的?
在保证公平性的前提下进行资源降维,以达到更好的分配效果
Resource Manager高可用性
热备方案
Active Master提供服务,Standby Master作为备节点
基于共享存储的 HA 解决方案
Active Master 不断将信息写入共享存储系统(ZooKeeper),故障切换时 Standby Master 从共享存储恢复数据,待信息完全同步后切换至 Active Master