这是我参与「第四届青训营」笔记创作活动的第16天。
YARN 简介
YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
优化分配模型
-
保障公平性
-
保障高效性
-
保障高可用
-
满足 “尽可能多”
- 座位超售
- 学院超用
- 座位超发
- 鼓励快餐
-
就餐学生有个性化需求
调度系统演进
- 由信息科技时代(IT)进化到数据科技时代(DT),注重信息价值
- 数据计算方式也发生了很大变革,注重效率
- 企业服务器需要数以万计的硬件支持
- 灵活调度、提高利用率是降本增效的关键。
当用有限资源解决有限资源无法满足的需求时就需要调度。
集群资源管理与调度系统的核心目标是设计出更好的资源管理与调度策略,使得整个集群在保障任务SLA的前提下能够实现更高的资源利用率、更快的计算任务完成速度。
YARN 面临的挑战
- 公平性:各租户能够公平的拿到资源运行任务
- 高性能:高调度吞吐、低调度延迟,保障资源快速流转
- 高可用:集群要具备很强的容错能力
- 单集群规模提升:原生 YARN 单集群仅支持 5K
- 高集群资源利用率
- 高任务运行质量保障
YARN 的整体架构
主要包含两大角色:
-
Resource Manager
- 整个集群的大脑,负责为应用调度资源,管理应用生命周期;
- 对用户提供接口,包括命令行接口,API, WebUI 接口;
- 可以同时存在多个RM、,同一时间只有一个在工作,RM 之间通过 ZK 选主;
-
Node Manager
- 为整个集群提供资源, 接受 Container 运行;
- 管理Contianer的运行时生命周期, 包括Localization, 资源隔离, 日志聚合等;
YARN 的任务运行生命周期流程
核心板块
核心板块为 Resource Manager和 Node Manager
Resource Manager
主要职责
总的来说,RM 负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务;
-
与客户端交互,处理来自客户端的请求
-
启动和管理 AM,运行失败时自动重试
-
管理所有 NM,接收 NM 的汇报信息并下达管理指令
-
资源管理与调度
- 将资源按照一定方式组织起来,例如:资源池
- 将任务按照一定方式组织起来,例如:队列
- 接收来自各个 AM 的资源请求
- 按照一定分配策略将资源分配给 AM
调度分析
YARN调度流程由心跳触发
-
AM 定期与 RM 保持心跳,并将资源请求记录在 RM 中;
-
触发时机: 由节点心跳触发针对此节点的调度;
-
找 Label: 根据节点 Label 找到对应 Lable 下的所有队列;
-
找队列: 将队列进行 DRF 排序, 找到当前最“饥饿”的队列;
-
找应用: 将此队列内所有应用按照优先级进行排序(优先级由用户提交时指定), 找到优先级最高的应用, 优先级相同时按DRF 算法排序;
-
找资源请求: 优先级最高的资源请求进行资源分配;
Node Manager
主要职责
NM 是节点代理,从 AM 接受命令(启停 Container)并执行,通过心跳方式向 RM 汇报节点状态并领取命令
- 与 RM
- 心跳汇报节点健康状况和 Container 运行状态;
- 领取 RM 下达的命令;
- 与 AM
- 启动容器
- 停止容器
- 获取容器状态
节点健康检查机制
节点健康检测机制是 NM 自带的健康状况诊断机制。通过该机制 NM 可时刻掌握自己健康状况并及时汇报给 RM,RM 根据 NM 健康情况决定是否为其分配新任务。
- 自定义 Shell
- 检测磁盘损坏数目
小结
YARN是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台。YARN的核心板块为 Resource Manager和 Node Manager。RM 负责集群所有资源的统一管理和分配,NM从 AM 接受命令并执行,通过心跳方式向 RM 汇报节点状态。