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

133 阅读3分钟

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

2 YARN核心模块

对YARN中两个核心模块Resource Manager 和 Node Manager进行纤细的阐释,介绍其整体架构、主要职责、核心功能

2.1 Resource Manager

整体架构

RM整体架构如上图,因为需要进行集群里所有任务的管理,所以他管理着所有的AppMaster,最上面ApplicationMasterService和AM定期进行心跳的保持,来负责资源请求的一些处理,AMLivelinessMonitor监控每一个AM是否存活,ApplicationMasterLauncher负责AM的拉起。图中中间左部是一些UserService,提供外部访问,中间ResourceScheduler按照一定的策略对资源请求进行调度,YARN是基于事件机制进行处理,中间右面是维护的一些重要对象的状态机,最下面是对集群所有节点的维护,每个物理机上都会部署一个NodeManager。

主要职责

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

  • 与客户端交互,处理来自客户端的请求

  • 启动和管理 AM,运行失败时自动重试

  • 管理所有 NM,接收 NM 的汇报信息并下达管理指令

  • 资源管理与调度

    • 将资源按照一定方式组织起来,例如:资源池
    • 将任务按照一定方式组织起来,例如:队列
    • 接收来自各个 AM 的资源请求
    • 按照一定分配策略将资源分配给 AM

状态机管理

  1. RMApp状态机

当一个任务提交上来之后状态进行流转

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

一个任务可能会启动多个实例,每个实例会维护个RMAppAttempt状态

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

每个任务都是以容器的状态进行的

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

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

调度流程

  • AM 定期与 RM 保持心跳,并将资源请求记录在 RM 中;
  • 触发时机: 由节点心跳触发针对此节点的调度;
  • 找 Label: 根据节点 Label 找到对应 Lable 下的所有队列;
  • 找队列: 将队列进行 DRF 排序, 找到当前最“饥饿”的队列;
  • 找应用: 将此队列内所有应用按照优先级进行排序(优先级由用户提交时指定), 找到优先级最高的应用, 优先级相同时按DRF 算法排序;
  • 找资源请求: 将此应用内的所有资源请求按照优先级排序(优先级由计算引擎指定), 找到优先级最高的资源请求进行资源分配;

典型调度器对比