为什么会有YARN调度器,在理想情况中,YARN应用发出的资源请求应该立刻给予满足,但是现实中资源时有限的,在一个繁忙的集群上,一个应用经常需要等待才能够得到所需要的资源。YARN调度器的工作就是根据已定策略为其应用分配资源。调度通常是一个难题,并且没有一个所谓的最好的策略。接下来,讲解YARN中的三个调度器。

YARN中有三种调度器:FIFO调度器、容量调度器、公平调度器

FIFO调度器

将应用放置在一个队列中,然后按照提交的顺序运行应用,按照先进先出的队列顺序。首先为队列中第一个应用的请求分配资源,第一个应用的请求被满足后再一次为队列中的下一个应用去服务。

优点是:简单易懂,配置简单

缺点:不适合共享集群。大应用会占用集群中的所有资源,所以每个应用必须等待着,直到轮到自己运行。

在一个共享集群中,更适合使用容量调度器或者公平调度器,这两种调度器都允许长时间运行作业并能及时完成,同时也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。

容量调度器

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

公平调度器

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

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