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

116 阅读3分钟

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

Yarn概述

调度系统解决的问题

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

调度系统预达的目标

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

调度系统范型

  • 集中式

    • 融合资源管理调度和任务控制
  • 两层式

    • 资源管理调度和任务控制解耦
  • 共享状态式

    • 多个调度器基于乐观并发共享全局资源视图
  • 分布式

    • 多个调度器基于先验知识进行最快调度决策
  • 混合式

    • 多种类型调度器共存,共同分配

YARN面临挑战

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

Yarn核心模块

Resource Manager

主要职责

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

  • 与客户端交互

  • 启动和管理所有AM

  • 管理所有NM

  • 资源管理与调度

    • 组织资源(资源池)
    • 组织任务(队列)
    • 接收资源请求
    • 分配资源

Resource Manager状态机管理

  • NEW SAVING:收到任务后,创建RMApplmpl对象并将基本信息持久化;
  • ACCEPTED:调度器接受该任务后所处的状态,任务等待被分配资源;
  • RUNNING:任务成功获取到资源并在节点运行;
  • SCHEDULED:通过合法性检查后所处的状态,开始为该任务分配资源;
  • ALLOCATED_SAVING:收到分配的Container后,在持久化完成前所处的状态;
  • ALLOCATED:信息持久化完成后所处的状态;
  • LAUNCHED: RM的ApplicationMasterLauncher 与 NM通信以启动AM时所处的状态;
  • RESERVED:开启资源预留时,当前节点不能满足资源请求时所处的状态;
  • ALLOCATED:调度器分配一个 Container给AM;
  • ACQUIRED: Container 被AM领走后的状态;
  • EXPIRED:AM获取到Container后,若在一定时间内未启动Container,RM会强制回收该Container;
  • DECOMMISSIONED:节点下线后的状态;
  • UNHEALTHY:节点处于不健康状态,健康检测脚本异常或磁盘故障;
  • LOST:节点超过一定时间(默认10分钟)未与RM发生心跳后所处的状态;

Resource Manager调度器分析

调度流程

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

Node Manager主要职责

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

  • 与RM交互

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

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

重要机制

Fair Share

什么是

  • 所有队列Fair Share之和<= TotalResource;
  • S.minShare <= Fair Share <= S.maxShare;

为什么需要

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

Fair Share类型

  • Steady Fair Share
  • Instantaneous Fair Share