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

160 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第12天

1. YARN概述

1.1 调度系统的演进(背景)

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

1.2.1 调度系统的演进(解决的问题)

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

1.2.2 调度系统的演进(预期的目标)

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

1.3 YARN

1.3.1 YARN设计思想

Hadoop 1.0:

  • 可扩展性差
  • 可靠性差
  • 资源利用率低
  • 无法支持多种计算框架

Hadoop 2.0:

  • 资源管理和任务控制解耦
  • Yarn(Yet Another Resource Negotiator)支持多种计算框架的统一资源管理平台

image.png

1.3.2 Yarn离线生态

image.png

1.3.3 Yarn面临的挑战

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

1.4 YARN整体架构

ResourceManager:

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

NodeManager:

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

image.png

2 Yarn核心模块

2.1 ResourceManager整体架构

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

RMApp 状态机:

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

调度流程:

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

image.png

调度器:

image.png

2.2 NodeManager

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

与RM交互:

  • 心跳汇报节点状态
  • 领取RM下达的命令

与AM交互

  • 启动容器
  • 停止容器
  • 获取容器状态

3 重要机制

3.1 调度策略——Fair Share

Fair Share:

队列空闲时按照一定策略将资源分配给其他活跃队列。

目的:

  • 实现队列间资源共享,提高资源利用率
  • 缓解繁忙队列压力

Fair Share类型:

  • Stead Fair Share
  • Instantaneous Fair Share

3.2 调度策略——DRF(Dominant Resource Fair)

DRF:

DRF是最大最小公平算法在多维资源上的具体体现,旨在使不同用户的“主分享量”最大化的保持公平

目的:

在保证公平的前提下进行资源降维

3.3 容错机制——高可用性

RM高可用

  • 热备方案:Active Master提供服务、Standby Master作为备节点
  • 基于共享内存的HA解决方案:关键信息写入共享存储系统(ZK)

NM高可用

  • 关键信息存储至leveldb数据库
  • 重启时从yarn-nm-recovery下的leveldb数据库加载数据