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

225 阅读12分钟

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

课前

《大数据日知录》读书笔记

集群资源管理与调度

采用独立的资源管理与调度系统的好处:

  1. 集群整体资源利用率高
  2. 可增加数据共享能力
  3. 支撑多类型计算框架和多版本计算框架

常见的资源主要包括内存,CPU,网络资源与磁盘I/O资源。不同的资源管理与调度系统基本上遵循如下概念模型

Screenshot 2022-08-30 at 2.44.03 PM.png

  • 资源组织模型:主要目标是将集群中当前可用的各种资源采用一定的方式组织起来,以方便后续的资源分配过程。一个常见的资源组织方式是将资源组织成多层级队列的方式,平级多队列以及单队列也是非常常见的资源组织模型。
  • 调度策略:其负责以一定方式将资源分配给提交到系统的任务。常见的调度策略包括FIFO、公平调度、能力调度、延迟调度等
  • 任务组织模型:主要目标是将多用户提交的多任务通过一定方式组织起来,以方便后续资源分配。Hadoop 1.0中将任务按照平级多队列组织,Hadoop 2.0中增加了层级队列的树形队列结构,以便用更灵活的方式管理任务队列。

抽象的通用资源管理架构

通用调度器由资源收集器和资源调度策略构成,同时管理资源池和工作队列数据结构。

Screenshot 2022-08-30 at 2.48.42 PM.png

  • 节点管理器:集群中每台机器上会配置节点管理器,其主要职责是不断地向资源收集器汇报目前本机资源使用状况,并负责容器的管理工作。当某个任务被分配到本节点执行时,节点管理器负责将其纳入某个容器执行并对该容器进行资源隔离,以避免不同容器内任务的相互干扰。
  • 资源收集器: 不断地从集群内各个节点收集和更新资源状态信息,并将其最新状况反映到资源池中。
  • 资源池: 列出了目前可用的系统资源。
  • 资源调度策略:具体决定如何将资源池中的可用资源分配给工作队列的方法,常见的策略包括FIFO、公平调度策略和能力调度策略等。
调度系统设计的基本问题

资源异质性与工作负载异质性

资源异质性:一般通过将资源分配单位细粒度划分为较小单元来解决这个问题。

工作负载异质性:因为各种服务和功能特性各异,对资源的需求差异也很大。比如对外服务强调高可用性以及资源的充分优先保障,而后台运行的批处理作业往往是由很多短任务构成的,所以需要调度决策过程要尽可能快,

数据局部性

大数据场景的一个基本设计原则是:将计算任务推送到数据所在地进行,这一般被称为“数据局部性”。

在资源管理与调度语境下,有3种类型的数据局部性:节点局部性 (Node Locality)、机架局部性(Rack Locality)和全局局部性(Global Locality)。

节点局部性 是指可以将计算任务分配到数据所在的机器节点,这是数据局部性最优的一种情形,因为完成计算无须任何数据传输。

机架局部性 指的是虽然计算任务和所需数据分属两个不同的计算节点,但是这两个节点在同一个机架中,这也是效率较高的一种数据局部性,因为机架内机器节点间网络传输速度要明显高于机架间网络传输速度。

全局局部性 其他的情况则属于全局局部性,此时需要跨机架进行网络传输,会产生较大的网络传输开销。

抢占式调度与非抢占式调度

资源分配粒度

  1. All-or-Nothing策略:将作业的所有所需资源一次性分配完成。MPI任务就是一 种典型的需要采纳群体分配策略的任务类型。

  2. 采取增量满足式分配策略,即对于某个作业来说,只要分配部分资源就能启动一些任务开始运行,随着空闲资源的不断出现,可以逐步增量式分配给作业其他任务以维持作业不断地向后推进,以MapReduce为代表的批处理任务一般采用增量满足式分配策略。

  3. “资源储备”策略:指只有分配到一定量的资源作业才能启动,但是在未获得足够资源的时候,作业可以先持有目前已分配的资源,并等待其他作业释放资源,这样从调度系统不断获取新资源并进行储备和累积,直到分配到的资源量达到最低标准后开始运行。采取“资源储备”策略的调度,在作业启动前,已分配给该作业的资源一直处于闲置状态。

饿死与死锁问题

资源隔离方法

相比Hadoop 1.0的Map和Reduce槽(Slot)的粗粒度资源分配方式,无论是YARN还是Mesos都采取了将各种资源(CPU、内存、网络带宽 和I/O带宽)封装在容器中的细粒度资源分配方法,整个分布式资源管理系统封装了为数众多的资源容器,为了避免不同任务之间互相干扰,需要提供容器间的资源隔离方法。

目前对于资源隔离最常用的手段是Linux容器,YARN和Mesos都采用了这种方式来实现资源隔离。LXC是一种轻量级的内核虚拟化技术,可以用来进行资源和进程运行的隔离,通过LXC可以在一台物理主机上隔离出多个相互隔离的容器。

资源管理与调度系统范型

大概有3种资源管理与调度系统范型: 集中式调度器、两级调度器(Yarn,Mesos等)与状态共享调度器

资源调度策略

FIFO调度策略 / 公平调度器(Fair Scheduler) / 能力调度器 / 延迟调度策略 / 主资源公平调度策略

Yarn

Yarn的整体架构如下图所示,其最主要的构件包括:唯一的资源管理器(RM)、每个作业一个的“应用服务器”(AM)以及每个机器一个的“节点管理器”(Node Manager,NM)。

Screenshot 2022-08-30 at 3.37.18 PM.png

RM:YARN的RM支持“抢占式调度”,当集群资源稀缺时,RM可以通过协议命令AM释放指定的资源。

  • Client-RM接口负责按照一定协议管理客户提交的作业;

  • RM-NM接口主要和各个机器的Node Manager通过心跳方式进行通信,以此来获知各个机器可用的容器资源以及机器是否产生故障等信息;

  • AMS负责系统内所有AM的最初启动与运行状态管理。

Yarn的任务执行过程

Screenshot 2022-08-30 at 3.50.56 PM.png

(1) 用户通过客户端向YARN提交作业。

(2) RM通过调度器申请资源,用于启动运行作业的AM; 如果申请到,则AMS负责通知节点管理器在相应容器内启动执行AM。

(3) AM负责将作业划分为若干任务,并向RM请求启动任务所需的资源; RM接收到请求后,通过调度器分配资源,找到合适的容器 后,将这些资源信息返回给AM。

(4) AM根据资源信息,在任务间优化资源分配策略,确定后直接与资源所在的节点管理器联系,在对应的容器中启动任务,节点管理器负责容器的资源隔离。

(5) AM在部分任务执行完成后逐步向RM释放所占资源。

课中

Yarn概述(离线调度)

YARN在 MapReduce v1的基础上发展而来,将资源管理和任务控制解耦,分别由 Resource Manager 和 ApplicationMaster 负责,是一个两层调度系统。

YARN 面临的挑战

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

任务运行核心流程

Screenshot 2022-08-31 at 1.13.39 AM.png

  1. 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

  2. ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

  3. ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

  4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

  5. 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

  6. NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

  8. 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

Yarn核心模块

Resource Manager

  • RM 负责集群所有资源的统一管理和分配,接收各节点汇报信息并按照一定策略分配给各个任务
  • 可以同时存在多个RM,同一时间只有一个在工作,RM 之间通过ZooKeeper选主

**调度分析:YARN调度流程由心跳触发 **

image.png

Node Manager

  • Node Manager是节点代理,从AM接受命令(启停 Container)并执行,通过心跳方式向RM汇报节点状态并领取命令(清理 Container)。
  • 与 RM 交互:心跳汇报节点健康状况和 Container 运行状态;领取 RM 下达的命令;
  • 与 AM 交互:启动容器;停止容器;获取容器状态

Yarn重要机制

公平性保障

Fair Share 调度策略:队列配置 minShare 和 maxShare,当队列空闲时按照一定策略将资源分配给其他活跃队列。Fair Share调度策略是为了在保障公平的前提下实现队列间资源共享,提高资源利用率,缓解繁忙队列压力

DRF 调度策略:DRF是最大最小公平算法在多维资源上的具体实现,旨在使不同用户的“主分享量”最大化的保持公平;在保证公平性的前提下进行资源降维,以达到更好的分配效果;

高性能保障

状态机管理: 状态机由一组状态(初始状态、中间状态和最终状态)组成,状态机从初始状态开始运行,接收一组特定事件,经过一系列中间状态后,到达最终状态并退出;每种状态转换由一个四元组表示:转换前状态、转换后状态、事件和回调函数;

事件处理模型: YARN 采用了基于事件驱动的并发模型,具有很强的并发性可提高系统性能。

高可用保障

RM高可用:

热备方案:集群中存在一个对外服务的 Active Master 和若干 Standby Master,一旦 Active Master 故障,立即采取一定策略选取某个 Standby Master 转换为 Active Master 正常对外提供服务;

基于共享存储的 HA 解决方案:Active Master 不断将信息写入共享存储系统(ZK),故障切换时 Standby Master 从共享存储恢复数据,待信息完全同步后切换至 Active Master;

NM 高可用:相关信息存储至 leveldb 数据库;NM 重启时加载 yarn-nm-recovery 下的 leveldb 数据库;

课后 问题思考

  1. Yarn属于两层式调度系统。其有一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。ResourceManager负责整个系统的资源管理和分配,ApplicationMaster负责单个应用程序的管理。
  2. NM 与 RM 之间的交互采用的是 “Pull 模型”,总是由slave节点NM主动发起,向RM注册或周期性汇报。好处是减轻RM的负担,不用再忙着轮循NM
  3. NM 与 AM 之间的交互采用的是 “Push 模型”。好处是实时性强,任务很快被提交给AM,处理速度快。

4.(1)核心调度策略不同。Capacity Scheduler的调度策略是,先选择资源利用率低的queue,然后在queue中同时考虑FIFO和memory constraint因素;而Fair Scheduler可选择按照FIFO、Fair或DRF策略为应用程序分配资源,是一种资源公平共享调度策略。(2)Fair Scheduler支持资源抢占。当队列中有新的应用提交时,系统调度器理应为它回收资源,但是考虑到共享的资源正在进行计算,所以调度器采用先等待再强制回收的策略,即等待一段时间后入股仍没有获得资源,那么从使用共享资源的队列中杀死一部分任务,通过yarn.scheduler.fair.preemption设置为true,开启抢占功能。(3)Fair Scheduler中有一个基于任务数量的负载均衡机制,该机制尽可能将系统中的任务分配到各个节点。(4)Fair Scheduler可以为每个队列单独设置调度策略(FIFO Fair DRF)(5)Fair Scheduler由于可以采用Fair算法,因此可以使得小应用快速获得资源,避免了饿死的情况

  1. ResourceManager为管理员提供了一套独立的服务接口AdminService,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群。