调度框架学习笔记(1)—— 概述

1.1 什么是调度

通常所说的调度(schedule)是和时间有关的。

1.1.1 单 CPU 的时间片调度

时间作为唯一的不可逆转的资源,一般是划分为多个时间片来使用。就计算机而言,由于 CPU 的速度快的多,所以就有了针对 CPU 时间片的调度,让多个任务在同一个 CPU 上运行起来。某一时刻CPU还是单任务运行的。

1.1.2 多 CPU 协作

为了在同一时间运行更多的任务,或者多个处理器一起工作完成一个任务目标,就需要一个协调者——这就成为一个分布式系统,就单个数据中心或者小范围来说,这就是集群。

1.1.3 资源调度

如果让一个分布式系统运行多个任务,每个任务对分布式系统中的资源必然产生竞争,时间调度就发展到资源调度。被调度的资源指的是,内存、CPU、网络资源、磁盘 I/O

集群资源管理系统是对底层硬件的进一步抽象,它屏蔽了硬件的异构性,对上层各种应用提供资源统一管理和调度。从当前公认的云计算划分看,它属于IAAS(Infrastructure-as-a- Service)。

1.2 为啥要做资源调度

1.2.1 资源调度目的

通过一定策略把资源分配给用户提交到系统里的各种任务。在计算机中资源管理与调度是根据具体场景而设定的,其实终极目的都是为了使资源分配的更加合理。

1.2.2 资源调度意义

调度直接影响到运行集群的开销,好的资源调度框架,可以大大提高资源利用率,降低运营成本。一个糟糕的调度框架会导致集群的资源利用率很低,那些昂贵的机器资源则会白白浪费。

1.3 如何调度(策略)

也就是调度(负载均衡)算法,以下是几个常见的调度策略。

1.3.1 FIFO Scheduler

将所有的 Job 放到队列中,先按照作业的优先级高低、再按照到达时间的先后,为每个 Job 分配资源。如果第一个 Job 需要的资源被满足了,如果还剩下了资源并且满足第二个 Job 需要的资源,那么就为第二个 Job 分配资源,以此类推。

  • 优点:简单,不需要配置。
  • 缺点:不适合共享集群。如果有大的 Job 需要很多资源,那么其他 Job 可能会一直等待。

1.3.2 Capacity Scheduler

Capacity Scheduler 用于一个集群(集群被多个组织共享)中运行多个 Job 的情况,目标是最大化吞吐量和集群利用率。

Capacity Scheduler 允许将整个集群的资源分成多个部分,每个组织使用其中的一部分,即每个组织有一个专门的队列,每个组织的队列还可以进一步划分成层次结构,从而允许组织内部的不同用户组的使用。每个队列内部,按照 FIFO 的方式调度 Job。当某个队列的资源空闲时,可以将它的剩余资源共享给其他队列。

1.3.3 Fair Scheduler

当集群中只有一个 Job 时,它独占集群资源。当有新的 Job 提交时,空闲的资源被新的 Job 使用,这样最终每个 Job 就会得到大约相同的资源。可以为不同的 Job 设置优先级,决定每个 Job 占用的资源百分比。Fair Scheduler 可以让短的作业在合理的时间内完成,而不必一直等待长作业的完成。

附录:参考资料

集群调度技术研究综述

集群资源管理与调度概要

YARN中FIFO、Capacity以及Fari调度器的详细介绍

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

解析Google集群资源管理系统Omega

posted @ 2018-12-24 01:59  zhance  阅读(359)  评论(0编辑  收藏  举报