分布式资源管理系统YARN | 青训营笔记

124 阅读4分钟

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

YARN概述

调度系统要解决的问题

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

image.png

调度系统预达的目标

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

调度系统范型

  • 集中式:融合资源管理调度和任务控制
  • 两层式:资源管理调度和任务控制解耦
  • 共享状态式:多个调度器基于乐观并发共享全局资源视图
  • 分布式:多个调度器基于先验知识进行最快调度决策
  • 混合式:多种类型调度器共存,共同分配

YARN设计思想

YARN(Yet Another Resource Negotiator)是Hadoop 2.0中的调度系统,是支持多种计算框架的统一资源管理平台。

离线生态

image.png

面临的挑战

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

系统架构

image.png

  • Resource Manager
    • 资源管理和调度
    • 任务生命周期管理
    • 对外进行交互
  • Node Manager
    • 提供集群资源
    • 管理Container运行

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

image.png

YARN核心模块

Resource Manager

整体架构

image.png

主要职责

image.png

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

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

状态机管理 - RMApp状态机

image.png

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

状态机管理 - RMAppAttempt

image.png

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

状态机管理 - RMContainer

image.png

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

状态机管理 - RMNode

image.png

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

调度流程

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

Node Manager

整体架构

image.png

主要职责

image.png

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

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

状态机管理 - Application

image.png

  • INITING:Application初始化状态,创建工作目录和日志目录
  • FINISHING CONTAINERS WAIT:调等待回收Container所占用的资源所处的状态
  • APPLICATION RESOURCE CLEANINGUP:Application所有Container占用的资源被回收后所处的状态

状态机管理 - Container

image.png

  • LOCALIZING:正在从HDFS下载依赖的资源
  • EXITED WITH SUCCESS:Container运行脚本正常退出执行
  • CONTAINER CLEANUP AFTER KILL:Container被kill后所处的状态

状态机管理 - LocalizedResource

image.png

  • DOWNLOADING:资源处于下载状态
  • LOCALIZED:资源下载完成
  • FAILED:资源下载失败