走进Yarn资源管理和调度(上)|青训营笔记

212 阅读3分钟

这是我参与【第四届青训营】笔记创作活动的第1天。

01 YARN概述

1.1初识调度系统-场景导入

Screenshot_20220820_225149.jpg 分析需求:要满足公平性高效性高可用

1.1.1一种简易的分配模型

Screenshot_20220820_230132.jpg 思考可能存在的问题:

  1. 如果就餐时间不一致,可能造成本应分配到座位的学院因为就餐时间较晚而无法得到服务;
  2. 硬性分配的座位很难进行弹性调整;
  3. ……

1.1.2优化模型

根据需求对分配模型进行优化:

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

Screenshot_20220820_230925.jpg

1.1.3调度系统发展的背景

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

1.2调度系统演进

1.2.1解决的问题

  • 用有限的资源解决有限资源无法满足的需求时就需要调度;
  • 调度系统主要解决资源请求和可用资源间的映射(Mapping)问题 Screenshot_20220820_231545.jpg

1.2.2预达的目标

  • 严格的多租户间的公平,容量保障
  • 调度过程的高吞吐与低延迟
  • 高可靠性和高可用性保障
  • 高可扩展的调度策略
  • 高集群整体物理利用效率
  • 满足上层任务的个性化调度需求
  • 任务持续、高效、稳定运行……

1.2.3调度系统范型

Screenshot_20220820_232123.jpg

1.3YARN设计思想

1.3.1演化背景

image.png

1.3.2离线生态

image.png

1.3.3面临挑战

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

1.4YARN整体架构

1.4.1系统架构

image.png Resource Manager

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

Node Manager

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

1.4.2任务运行生命周期核心流程

image.png

02 核心模块

2.1Resource Manager

2.1.1整体架构

image.png

2.1.2主要职责

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

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

image.png

2.1.3RMApp状态机

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

image.png

2.1.4RMAppAttempt

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

2.1.5任务/资源组织

image.png

  • 任务按队列组织
  • 节点按Label组织

2.1.6调度流程

image.png

  • AM与RM心跳:记录资源请求
  • 触发时机:节点心跳
  • 找Label:获取所有队列
  • 找队列:最“饥饿”队列优先
  • 找任务:优先级高的任务优先
  • 找资源请求:优先级高的请求优先

2.1.7典型调度器

image.png

2.2Node Manager

2.2.1整体架构

image.png

2.2.2主要职责

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

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

image.png

2.2.3节点健康检测机制

image.png