理想情况下,YARN应用发出的资源请求应该立刻给予满足,然后在现实中资源是有限的,在一个繁忙的集群上,一个应用经常需要等待才能得到所需的资源。调度通常是一个难题,并没有一个所谓“最好”的策略,这就是诶什么YARN提供了多种调度器和可配置策略供我们选择的原因。

调度选项
YARN中有三种调度器可用:FIFO调度器(FIFO Scheduler),容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler).FIFO调度器将应用放置在一个队列中,然后按照提交的顺序(先进先出)运行应用。首先为队列中第一个应用的请求分配资源,第一个应用的请求被满足后再依次为队列中下一个应用服务。

FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群。大的应用会占用集群中的所有资源,所以每个应用必须直到轮到自已运行,在一个共享集群中,更适合使用容量调度器或者公平调度器,这两种调度器都允许长时间运行的作业能及时完成,同事也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。

cluster yarn 调度器 选择 yarn调度器及工作方法_hadoop


由图中可以看出,当使用FIFO调度器时,小作业一直被阻塞,直到大作业完成。

cluster yarn 调度器 选择 yarn调度器及工作方法_ci_02


使用容量调度器,一个独立的专门队列保证小作业一提交就可以启动,由于对列容量是为那个对列中的作业所保留的,因此这种策略是以整个集群的利用率为代价的,这意味着与使用FIFO调度器相比,大作业执行的时间要长。

cluster yarn 调度器 选择 yarn调度器及工作方法_ci_03


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

注意,从第二个作业的启动到获得公平共享资源之间会有时间滞后,因为它必须等待第一个作业使用的容器用完并释放出资源,当小作业结束且不再申请资源后,大作业将回去再次使用全部的集群资源。最终的效果是:既得到了较高的集群利用率,又能保证小作业能及时完成。