YARN的三种调度器

什么是Scheduler(调度器)

Scheduler即调度器,根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

YARN提供的三种内置调度器:
FIFO Scheduler(FIFO调度器)

FIFO 为 First Input First Output 的缩写,先进先出。FIFO 调度器将应用放在一个队列中,按照先后顺序
运行应用。这种策略较为简单,但不适合共享集群,因为大的应用会占用集群的所有资源,每个应用必须等待直到轮到自己。

优点:简单易懂,不需要任何配置
缺点:不适合共享集群,大的应用会占据集群中的所有资源,所以每个应用都必须等待,直到轮到自己执行。

如下图所示,只有当job1全部执行完毕,才能开始执行job2

yarn可以使用多种调度器 yarn三种调度器的区别_分布式

4.7.2.2. Capacity Scheduler(容量调度器)

容量调度器 Capacity Scheduler 允许多个组织共享一个 Hadoop 集群。使用容量调度器时,一个独立的专门队列保证小作业一提交就可以启动。

优点:小任务不会因为前面有大任务在执行,而只能一直等下去
缺点:这种策略是以整个集群利用率为代价的,这意味着与使用FIFO调度器相比,大作业执行的时间要长上一些。

yarn可以使用多种调度器 yarn三种调度器的区别_大数据_02

如图所示,专门留了一部分资源给小任务,可以在执行job1的同时,不会阻塞job2的执行,但是因为这部分资源是一直保留给其他任务的,所以就算只有一个任务,也无法为其分配全部资源,只能让这部分保留资源闲置着,有着一定的资源浪费问题。

4.7.2.3. Fair Scheduler(公平调度器)

公平调度器的目的就是为所有运行的应用公平分配资源。使用公平调度器时,不需要预留一定量的资源,因为调度器
会在所有运行的作业之间动态平衡资源,第一个(大)作业启动时,它也是唯一运行的作业,因而获得集群中的所有
资源,当第二个(小)作业启动时,它被分配到集群的一半资源,这样每个作业都能公平共享资源。

yarn可以使用多种调度器 yarn三种调度器的区别_大数据_03

如图所示,就像是把好几个任务拼接成了一个任务,可以充分利用资源,同时又不会因为大任务在前面执行而导致小任务一直无法完成