Yarn的调度器

3 篇文章 0 订阅

找到几篇不错的文章,可以先看看:

https://blog.csdn.net/wangguohe/article/details/79543676

 

 

https://blog.csdn.net/leone911/article/details/73885125/

https://blog.csdn.net/qq_30485769/article/details/53766434

https://www.cnblogs.com/lenmom/p/11285273.html

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

1.调度选项

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

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

下图描述了调度器之间的差异性,由图中可以看出,当使用FIFO调度器(i)时,小作业一直被阻塞,直至大作业完成。

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

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

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

 

2.容量调度器配置

1. 容量保证:可为每个队列设置资源最低量和资源使用上限,所有提交到该队列的应用程序共享该队列中的资源;最小容量不是“总会保证最低容量”,可能会借给其他节点。 
调度器总会选择当前资源使用率最低的队列,并为之分配资源。例如同级的队列A1,A2。它们最小容量均为30%。而 A1使用了12%,A2使用了10%,则调度器会优先将资源分给A2。 
2. 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列释放的资源会归还给该队列,这种资源灵活分配的方式明显可以提高资源的利用率; 
多租户:支持多用户共享集群和多应用程序同时运行,为防止当个应用或者用户或者队列独占集群资源,可为之增加限制,比如设置一个用户或者应用程序可以分配的最大资源数、最大任务运行数; 
3. 安全保证:每个队列有严格的ACLs列表规定它的访问用户,每个用户可以指定其他哪些用户允许查看自己应用程序的运行状态或者控制应用程序(比如kill); 
4. 动态更新配置文件:管理员可以根据需要动态更改各种配置参数,以实现在线集群管理。

相关文章:https://www.jianshu.com/p/1d5df94de97fhttps://www.cnblogs.com/0xcafedaddy/p/8669243.html

 

3.公平调度器配置

https://blog.csdn.net/qq_30485769/article/details/53766434

(1)Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。在上面的“Yarn调度器对比图”展示了一个队列中两个应用的公平调度;当然,公平调度在也可以在多个队列间工作。举个例子,假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
a) 公平调度器,就是能够共享整个集群的资源
b) 不用预先占用资源,每一个作业都是共享的
c) 每当提交一个作业的时候,就会占用整个资源。如果再提交一个作业,那么第一个作业就会分给第二个作业一部分资源,第一个作业也就释放一部分资源。再提交其他的作业时,也同理。。。。也就是说每一个作业进来,都有机会获取资源。

(2)注意,上面每个用户(队列)默认是平分资源。。因为每个队列默认权重是1。。如果某个队列权重设置的比较大,那么该队列内的job占用整个集群的资源就会更多。。。还是以上面的A和B为例,再多个C,他们的权重分别为1:1:2,那么会这样:

《1》当A有job时,B和C当前没有job,那么A的job可以使用整个集群的资源。

《2》当A和B都有job时,C没有job,然后A和B的权重都为1,此时有job运行的队列的总权重为2,那么此时A可以使用整个集群的1/2的资源,B也是可以使用整个集群的1/2资源。

《3》当A和C有job时,B没有job,A的权重为1,C的权重为2,此时有job运行的队列的总权重为3,那么此时A可以使用整个集群的1/3的资源,C也是可以使用整个集群的2/3资源。

《4》当A、B、C都有job时,A的权重为1,B的权重为1,C的权重为2,此时有job运行的队列的总权重为4,那么此时A可以使用整个集群的1/4的资源,B可以使用整个集群的1/4资源,C可以使用整个集群的2/4资源。。

《5》上面都是A、B、C同时有job的,有些时候是A有job,BC没有job,此时A占用整个集群的资源(假设有这么多任务),过了一会儿之后,BC也有job添加进来了,此时A还在占用着整个集群资源。。如果没有开启抢占设置,那么BC的job需要等A当前正在执行的job执行完释放资源(A如果还有没执行的job,那么只有等ABC三者占用的资源达到自己权重应该占有的资源配额时,A才会执行其他的job。也就是说,A此时每执行完一个job,就会释放一点资源,直到A占用的资源降到自己的权重资源配额内,此时才会继续执行A队列中新的job)。。。如果开启了抢占设置,当A占用着超过自身权重配额的资源时,B和C资源不够,并且还没达到自己使用的份额上限,此时就会kill掉A的job,强制释放A的资源,然后分配给B和C。。。

《6》A、B、C每个队列又可以单独设置调度策略(FIFO、Fair或DRF) 

上面四点中A、B、C三个队列有job时,job有多少个就无所谓了,A中有N个job,那么这N个job也只会使用A队列所占用的那部分资源。。A能占用整个集群多少资源,那就按上面五点计算。。


优点: 提高小应用程序响应时间:采用最大最小公平算法,小作业可以快速获取资源并运行完成,大作业也可以在执行(只不过会稍微慢点)

https://www.cnblogs.com/0xcafedaddy/p/8669243.html

 

三种调度策略对比 :

FIFOScheduler分配资源的顺序和提交应用程序的顺序相同,不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。 
CapacityScheduler中,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。 
FairScheduler中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值