走进YARN资源管理与调度 | 青训营笔记

114 阅读6分钟

这是我参与「第四届青训营」笔记创作活动的的第16天,以下是我的课堂笔记。 本次课程主要分为四个大板块:
1.YARN 概述
2. 核心模块
3. 重要机制
4. 公司实践

1.YARN 概述

1.1初识调度系统

场景导入

  • 学校为改善学生生活新建了一所美食餐厅,餐厅座位有限且只能堂食;
  • 各学院需缴纳一定管理费用后学生才能在该餐厅用餐,缴纳费用与分配的座位数成正比;
  • 因餐厅物美价廉、环境干净,来该餐厅就餐的人络绎不绝;

如何进行高效座位分配在保障就餐公平性的前提下让尽可能多的学生都能够及时就餐、尽可能多的座位被有效使用?

一种简易分配模型

  • 各个学院:获得座位数
  • 学院学生:按照学院组织
  • 餐厅经理:分配餐厅座位
  • 餐厅座位:有序排列放置 image.png

优化的分配模型

  • 保障公平性
    学院间:低分配座位满足率优先
    学院内:先来先服务
  • 保障高效性
    配备餐厅助手
    用餐小组负责人
  • 保障高可用
    配置备用经理 image.png

优化的分配模型

  • 如何满足“尽可能多”?
    座位超售:分配座位大于总座位数
    学院超用:学院可以超分配座位
    座位超发:“—个座位坐两个人”
    鼓励快餐:鼓励快速就餐离开
  • 如何满足就餐学生个性化需求?
    用餐小组必须坐一个桌子
    用餐小组必须坐不同桌子
    用餐小组必须靠窗位置坐
    有重要活动同学需靠前就餐 image.png

调度系统发展的背景
√IT到DT时代的变革,注重数据价值;
√数据计算方式的变革,注重计算效率;
√企业对外服务需数以万计的硬件资源;
√灵活调度、提高利用率是降本增效的关键问题;

image.png

1.2调度系统演进

调度系统解决的问题
√用有限资源解决有限资源无法满足的需求时就需要调度;
√调度系统主要解决资源请求和可用资源间的映射(Mapping)问题; image.png 调度系统预达的目标
√严格的多租户间公平、容量保障
√调度过程的高吞吐与低延迟
√高可靠性与高可用性保障
√高可扩展的调度策略
√高集群整体物理利用率
√满足上层任务的个性化调度需求
√任务持续、高效、稳定运行
√ We want to have all of them...However...

image.png
调度系统范型

image.png

1.3 YARN设计思想

演化背景
Hadoop 1.0时代:
●可扩展性差
●可靠性差
●资源利用率低
●无法支持多种计算框架

Hadoop 2.0时代:
●资源管理和任务控制解耦
●YARN (Yet Another ResourceNegotiator)支持多种计算框架的统━资源管理平台

image.png

离线生态

image.png

面临挑战

  • 公平性:各租户能够公平的拿到资源运行任务
  • 高性能:高调度吞吐、低调度延迟,保障资源快速流转
  • 高可用:集群要具备很强的容错能力
  • 大规模:单集群规模提升(原生YARN 5K)
  • 高集群资源利用率
  • 高任务运行质量保障

1.4 YARN 整体架构

系统架构
Resource Manager

  • 资源管理和调度
  • 任务生命周期管理
  • 对外进行交互

Node Manager

  • 提供集群资源
  • 管理Container运行

image.png 任务运行生命周期核心流程

image.png

2。 YARN核心模块

2.1 Resource Manager

image.png 主要职责
RM负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务。

  • 与客户端交互
  • 启动和管理所有AM
  • 管理所有NM
  • 资源管理与调度
    √组织资源(资源池)
    √组织任务(队列)
    √接收资源请求
    √分配资源

image.png
RMApp状态机
NEw SAVING:收到任务后,创建
RMApplmpl对象并将基本信息持久化;
ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源;
RUNNING:任务成功获取到资源并在节点运行;

image.png
RMAppAttempt
SCHEDULED:通过合法性检查后所处的状态,开始为该任务分配资源;
ALLOCATED_SAVING:收到分配的Container后,在持久化完成前所处的状态;
ALLOCATED:信息持久化完成后所处的状态;
LAUNCHED: RM的
ApplicationMasterLauncher 与NM通信以启动AM时所处的状态;

image.png RMContainer
RESERVED:开启资源预留时,当前节点不能满足资源请求时所处的状态
ALLOCATED:调度器分配一个 Container给AM;
ACQUIRED: Container 被AM领走后的状态;
EXPIRED:AM获取到Container后,若在一定时间内未启动Container,RM会强制回收该 Container;

image.png
RMNode
DECOMMISSIONED:节点下线后的状态;
UNHEALTHY:节点处于不健康状态,健康检测脚本异常或磁盘故障;
LOST:节点超过一定时间(默认10分钟)未与RM发生心跳后所处的状态;

image.png

2.2 Node Manager

整体架构

image.png 主要职责
NM是节点代理,从AM接受命令(启停Container)并执行,通过心跳方式向RM汇报节点状态并领取命令(清理Container) 。

  • 与RM交互
    √心跳汇报节点状态
    √领取RM下达的命令
  • AM交互
    √启动容器
    √停止容器获取容器状态

image.png

3.重要机制

image.png

4.公司实践

image.png

4.1 Gang 调度器

为什么需要开发Gang调度器?、 流式作业和训练作业的调度需求与批处理有很大的不同:批处理强调高吞吐,而流式训练类型作业更强调低延迟和全局视角;、 √调度缺乏全局视角
√单App调度过慢
√App间存在资源互锁

image.png

  • 全局视角 作业可自定义配置强弱约束;
    强约束:必须要满足的条件
    弱约束:尽量满足的约束
  • 低调度延迟 √RM维护所有节点状态信息;
    √资源请求同步分配,毫秒级返回;
  • Gang性资源交付 提供All-or-Nothing语义
    可满足的请求全部分配,否则返回失败;

4.2反调度器

为什么需要开发反调度器?

  • 调度器的调度决策受“时空”限制
    √“时”:触发调度时刻;
    √“空”:触发调度时集群状态;
  • 任务运行和集群状态高动态性
    √任务资源使用随流量变化而不断波动;
    √调度过程持续进行,集群状态持续变化;
  • 需要持续保证最初调度决策的正确性

image.png 反调度流程
根据AM请求中的强约束,构造强约束集;
遍历强约束集选择不再符合强约束条件的节点;
遍历异常节点下的Container,选择需要进行反调度的Container;
将反调度Container列表随心跳返回给AM;

image.png

4.3单集群规模突破50K

为什么需要提升单集群规模?

  • 更好的资源池化和资源共享
    √资源池更大,利于资源分时复用;
    √资源高效共享,提高集群资源利用率;

  • 降低运维成本
    √YARN原生单集群仅支持5K节点;
    √每多一个集群,运维负担就会加重;

image.png