程序员社区

YARN调度策略大揭秘

YARN调度策略,即存在于resourceManager中, 主要为了进行资源的调度。一共有三大类调度器,分别是FIFO、 Capacity Scheduler和Fair Scheduler。 Hadoop2.9.2默认的资源调度器是Capacity Scheduler。

下面,我们依次来介绍这三种调度器。

1. FIFO(先进先出调度器)

先进先出的调度器,一般很少有人使用,其特性是当一个任务请求发来后,如果使用FIFO调度器,按照任务到达时间排序,先到先服务,即将YARN集群中所有的资源全部调集过来,交给当前这个任务来运行, 后续的任务由于没有的资源,只能等待上一个任务执行完成。

好处:运行一些较大任务可以得到更多的资源。

弊端:任务的优先级只简单按照时间来排序,没有考虑更多条件,若是这个较大的任务,需要执行2小时,但是后面的小任务只需要执行1分钟就搞定,但由于上一个任务没有执行完成后,第二个必须先等待2小时。

YARN调度策略大揭秘插图

2. Capacity Scheduler (容量调度器)

Apache Hadoop默认使用的调度策略。 Capacity 调度器允许多个组织共享整个集群,每个组织可以获得集群的⼀一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用FIFO先进先出策略。

好处:支持多队列共享集群资源,即可以并行的运行多个MR的任务。

弊端:如果A队列中某一个大的任务将其他的队列中资源给占用了,此时B 或者 C队列的资源就会减少,若是此时B 、C任务比较多,则先去找占用资源的队列,归还资源,如果占用资源队列,没有执行完,则会一直占用着,因此会存在阻塞等待的现象。

YARN调度策略大揭秘插图1

3. Fair Scheduler(公平调度器)

Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。CDH版本的hadoop默认使用公平调度器。

公平调度也可以在多个队列间进行工作。例如,有两个用户A和B,他们分别拥有一个队列。当A启动一个job,而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过,片刻之后,两个任务会各自获得集群的一半资源。如果,此时B再启动第二个job,并且其它job还在运行,则它将会与B的第一个job共享B这个队列的资源,也就是说,B的两个job会用于四分之一的集群资源,而A的job仍然用于集群的一半资源,结果就是资源最终在两个用户之间平等的共享。

好处:任务动态公平分配资源。

弊端:相对其他调度器复杂。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » YARN调度策略大揭秘

一个分享Java & Python知识的社区