这是我参与「第四届青训营 」笔记创作活动的第13天
1. YARN 概述
1.1. 初始调度系统 - 场景导入
1.1. 初始调度系统 - 一种简易分配模型
1.1. 初始调度系统 - 优化的分配模型
1.1. 初始调度系统 - 调度系统发展的背景
1.2. 调度系统演进 - 调度系统解决的问题
1.2. 调度系统演进 - 调度系统预达到的目标
1.2. 调度系统演进 - 调度系统范型
1.3. YARN 设计思想 - 演化背景
1.3. YARN 设计思想 - 离线生态
1.3. YARN 设计思想 - 面临挑战
1.4. YARN整体架构 - 系统架构
1.4. YARN整体架构 - 任务运行生命周期核心流程
2. 核心模块
2.1. Resource Manager - 整体架构
2.1. Resource Manager - 主要职责
RM 负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务
- 与客户端交互
- 启动和管理所有AM
- 管理所有NM
- 资源管理与调度
- 组织资源(资源池)
- 组织任务(队列)
- 接受资源请求
- 分配资源
2.1. Resource Manager 状态机管理 - RMApp 状态机
NEW_SAVING:收到任务后,创建RMAppImpl对象并将基本信息持久化
ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源
RUNNING:任务成功获取到资源并在节点运行
2.1. Resource Manager 状态机管理 - RMContainer
RESERVED:开启资源预留时,当前节点不能满足资源请求时所处的状态
ALLOCATED:调度器分配一个Container给AM
ACQUIRED:Container被AM领走后的状态
EXPIRED:AM获取到Container后,若在一定时间内未启动Container,RM会强制回收该Container
2.1. Resource Manager 状态机管理 - RMNode
DECOMMISSIONED:节点下线后的状态
UNHEALTHY:节点处于不健康状态,健康检测脚本异常或磁盘故障
LOST:节点超过一定时间(默认10分钟)未与RM发生心跳后所处的状态
2.1. Resource Manager 调度器分析 - 任务/资源组织
- 任务按队列组织
- 节点按Label组织
2.1. Resource Manager 调度分析器 - 调度流程
- AM与RM心跳:记录资源请求
- 触发时机:节点心跳
- 找Label:获取所有队列
- 找队列:最饥饿队列优先
- 找任务:优先级高的任务优先
- 找资源请求:优先级高的请求优先
2.1. Resource Manager 调度分析器 - 典型调度器
2.2. Node Manager - 整体架构
2.2. Node Manager 主要职责
NM是节点代理,从AM接受指令(启停Container)并执行,通过心跳方式向RM汇报节点状态并领取命令(清理Container)
- 与RM交互
- 心跳汇报节点状态
- 领取RM下达的命令
- 与AM交互
- 启动容器
- 停止容器
- 获取容器状态
2.2. Node Manager 状态机管理 - Application
INITING:Application 初始化状态,创建工作目录和日志目录
FINISHING_CONTAINERS_WAIT:等待回收Container所占用的资源所处的状态
APPLICATION_RESOURCE_CLEANINGUP:Application所有Container占用的资源被回收后所处的状态
2.2. Node Manager 状态机管理 - Container
LOCALIZING:正在从HDFS下载依赖的资源
EXITED_WITH_SUCCESS:Container运行脚本正常退出执行
CONTAINER_CLEANUP_AFTER_KILL:Container被kill后所处的状态
2.2. Node Manager 状态机管理 - LocalizedResource
DOWNLADING:资源处于下载状态
LOACLIZED:资源下载完成
FAILED:资源下载失败
2.2. Node Manager 节点健康检测机制
3. 重要机制
3.1. 调度策略 - Fair Share 调度策略背景
3.1. 调度策略 - Instaneous Fair Share 定义
3.1. 调度策略 - Instaneous Fair Share 计算逻辑
3.1. 调度策略 - DRF(Domainant Resource Fair)调度策略
3.1. 调度策略 - DRF调度策略计算逻辑
3.2. 事件机制 - 状态机管理
- 状态机由一组状态(初始状态、中间状态和最终状态)组成,状态机从初始状态开始运行,接收一组特定事件,经过一系列中间状态后,到达最终状态并退出
- 每种状态转换由一个四元组表示:转换前状态、转换后状态、事件和回调函数
3.2. 事件机制 - 事件处理模型
- 所有处理请求会作为事件进入系统
- AsyncDispatcher负责传递事件给相应事件调度器
- 事件调度器将事件转发给另一个事件调度器或带有有限状态机的事件处理器
- 处理结果以事件形式输出,新事件会再次被转发,知道处理完成
YARN采用了基于事件驱动的并发模型,具有很强的并发性可提高系统性能