集群资源管理与调度基础理论综述

0. 前言

本文总结学习自《大数据日知录-架构与算法》

对于大型互联网公司来说,如何充分挖掘硬件资源潜力以及增加其利用率是至关重要的问题。对于互联网公司来说,无论是内部系统还是对外提供服务的系统,都运行着海量各种类型的任务,通常的做法是采用静态划分的方式进行,即不同类型的计算任务使用固定的硬件资源,各个计算框架之间相互独立,互不干扰。这种方式虽然简单,但是资源的整理利用率不高,存在某些计算系统缺少资源,而某些计算系统有大量计算资源闲置。

因此集群资源管理与调度系统的核心目标就是:在保证甚至加快计算任务的整理完成速度的前提下提高系统的资源利用率。

采用独立的资源管理与调度系统的优点有:

  • 集群整体资源利用率高。所有的资源由调度层进行统一的分配,不会出现在资源闲置情况下不同任务资源分配不均匀的情况;
  • 可增加数据共享能力。所有的计算框架共享同一个集群中的数据,避免了数据的重复存储和传输;
  • 支持多种类型的计算框架和多个版本的计算框架。计算框架在不断出现,不可能为每一个计算框架都构建一个计算集群,采用统一的调度系统就可以解决这个问题;

1. 资源管理抽象模型

1.1 概念模型

从概念上来说,集群管理与调度系统主要负责将集群中的硬件资源以一定的策略分配给不同的计算任务。其中涉及到三个主要模块:

  • 资源组织模型:主要就是将集群中的资源以一定的方式组织起来,以方便后续的分配和使用。例如Facebook的corona将资源组织为resource-group-pool三级队列结构,YARN中是以container为单位进行资源分配;
  • 调度策略:主要负责以一定的策略将资源分配给任务,例如FIFO方式,DRF方式等;
  • 任务组织模型:主要将用户提交的任务以一定的方式组织起来,方便后续的资源分配。例如各种任务队列;

1.2 通用架构

通用架构根据概念模型一般具有三个主要模块:

  • 节点管理器:负责管理本节点上的资源使用情况和任务运行情况,并定时向资源管理中心汇报自己的情况;
  • 资源管理中心:主要由资源收集器和调度器组成,一方面收集来自不同数据节点的资源信息,另外一方面根据当前的资源情况按照一定的调度策略分配资源给提交的任务;
  • 客户端:负责进行任务的提交;

2. 系统设计的基本问题

想要设计一个理想的调度系统需要考虑很多方面的问题,而不同的调度系统需要根据不同的场景进行适当权衡。

  • 资源异质性和工作负载异质性问题:对于一个庞大的集群,其采购往往是分批次的,不同批次的机器其硬件配置是不同的,这就导致资源异质性较大。目前采用将资源分配单位细粒度划分来解决;此外不同的计算框架不断出现,就导致工作负载的异质性不断扩大,这些工作负载不仅仅在运行方式上不同,在资源需求上也存在较大差异,某些任务之间还存在反亲和问题,这就给资源调度系统带来很大的挑战。例如对外服务要保证高可用和快速响应,对于批处理任务要保证快速调度等;
  • 数据局部性:大数据场景下因为数据传输开销要远大于计算逻辑传输开销,因此往往将计算任务推送到数据存储所在地进行,这就成为数据局部性问题。一般存在三种数据局部性:节点局部性,机架局部性和全局局部性。对于节点局部性不需要进行数据传输,对于机架局部性需要在机架之间进行数据传输存在一定开销,全局局部性需要更大的开销,因此好的调度系统需要尽量满足节点局部性。
  • 抢占式调度和非抢占式调度。抢占式调度指的是当系统资源不充足时高优先级的任务可以抢占低优先级任务的资源,Omega采用抢占式调度;非抢占式调度,每次只允许从空闲资源中分配,空闲资源若不足则等待,mesos采用非抢占式调度。两种方式各有有缺,一般如果强调高优先级任务执行效率的调度策略会采用抢占式调度,强调资源公平分配的调度采用非抢占式调度。
  • 资源分配粒度。资源分配粒度是解决资源异质性的一种有效方式。这其中存在三种方式:(1)群体分配,即要么全分要么全不分,MPI采用这种方式;(2)增量满足分配,只要分配部分资源就可以运行,MR采用这种方式;(3)资源储备,资源达到一定量才能启动作业,在作业启动前已经分配的资源处于闲置状态;
  • 饿死与死锁问题:饿死是由于调度策略不当而导致的,例如支持抢占或者优先级调度时,低优先级任务可能饿死,mesos中如果短任务很多则长任务可能饿死;死锁是由于资源分配不当而导致整个调度系统无法正常执行,例如在资源储备策略下,如果AB两个作业启动作业需要的资源为2/3,那么如果两个任务被分配了1/2的资源,这就导致死锁。
  • 资源隔离方法:为了减少任务之间的干扰需要进行一定的隔离措施,LXC是一种轻量级的隔离方式,其底层采用cgroups进行隔离,现在还有基于docker的隔离。

3. 资源管理与调度系统范型

此部分的更详细介绍可以参考资源管理与调度系统综述

  • 集中式调度器。分为单路径调度器和多路径调度器,单路径调度器对于所有的任务采用同一种调度策略,多路径调度器对于不同的任务采用不同的调度策略,谷歌在borg之前就采用多路径调度器。缺点:实现逻辑复杂,可扩展性差;并发性能差;
  • 两级调度器。分为中央调度器和框架调度器两级,mesos,YARN是典型代表。缺点:悲观并发控制影响系统性能;不支持抢占;不能保证全局最优
  • 状态共享调度器。每个计算框架可以看到集群全量资源信息,并采用乐观并发机制来解决资源竞争问题,Omega是突出代表。缺点:需要进行一致性维护;资源频繁金正;不利于任务的优先级抢占;
  • 总结集中式适合小规模集群;两级调度器适合负载同质的大规模集群;状态共享适合负载异质且资源冲突不大的场景。集中式调度器类似于完全计划经济,两级调度器类似于大政府小市场混合经济模式,共享状态类似于小政府大市场的自由竞争经济模式。

4. 资源调度策略

  • FIFO策略:先来先服务策略
  • 公平调度器:将资源分为多个资源池,每个资源池分配资源上下限,当某个资源池有资源空闲时可以将资源共享给其他资源池,资源池内部采用最大最小公平算法。其支持抢占式调度,强调作业间的公平性;
  • 能力调度器:将任务分成层级队列,每个队列设置上下限,空闲资源可以共享,调度时优先分配给资源使用率最低的队列(使用资源与分配资源的比例),队列内部按照优先级先后按照FIFO方式进行调度;
  • 延迟调度器:为了达到数据本性的目的,可以暂时拒绝资源分配;
  • 主资源公平调度:每次调度优先从主资源分配占比小的任务中进行调度,详细分析可以参考DRF详解
  • 其他还有针对Hadoop系统的优化调度策略。资源感知调度策略、动态优先级调度策略、最长时间预估调度策略、约定截止时间调度策略等。

你可能感兴趣的:(资源管理与任务调度)