yarn的Scheduler

yarn的Scheduler

调度器

先进先出调度

hadoop1.x使用的默认调度器就是FIFO。FIFO采用队列方式将一个一个job任务按照时间先后顺序进行服务。比如排在最前面的job需要若干maptask和若干reducetask,当发现有空闲的服务器节点就分配给这个job,直到job执行完毕。

公平调度

公平调度器按资源池(pool)来组织作业,并把资源公平的分到这些资源池里。默认情况下,每一个用户拥有一个独立的资源池,以使每个用户都能获得一份等同的集群资源而不管他们提交了多少作业。按用户的 Unix 群组或作业配置(jobconf)属性来设置作业的资源池也是可以的。在每一个资源池内,会使用公平共享(fair sharing)的方法在运行作业之间共享容量(capacity)。用户也可以给予资源池相应的权重,以不按比例的方式共享集群。
除了提供公平共享方法外,公平调度器允许赋给资源池保证(guaranteed)最小共享资源,这个用在确保特定用户、群组或生产应用程序总能获取到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在其它资源池间进行切分。
主要特点如下:
Ø 支持多用户多队列
Ø 资源公平共享(公平共享量由优先级决定)
Ø 保证最小共享量
Ø 支持时间片抢占
Ø 限制作业并发量,以防止中间数据塞满磁盘

容量调度

hadoop2.x使用的默认调度器是Capacity Scheduler。

子队列不能直接继承父队列属性 队列配置成功以后要绑定调度 队列超出最多100%

容量调度的特点

层次化的队列:队列的层次化确保了子队列能够先于其它队列共享资源,这提供了更多对共享资源的控制和可预测性。
容量保证:队列将被分配一定额度的容量,这样所有提交到该队列的应用将访问分配给该队列的容量,管理员可以为每个队列分配的容量设置soft限制和可选的hard限制。
安全性:每个队列都有严格的ACL控制着哪个用户可以向队列提交应用程序,还有防护措施以保证用户不能查看或者修改其他用户的应用,最后还支持队列管理员角色。
灵活性:空闲的资源可以分配给任何队列,即使超出了该队列所能够分配的容量。假设有一个队列在将来的某个时刻请求这些空闲的资源,一旦被调度使用这些资源的任务完成后,这些资源将被分配给请求对列。这确保了资源以可预测和灵活的方式队列使用。
多租户:hadoop提供了全方位的设置阻止单一应用、用户和队列独占队列或集群的资源以确保集群不会不堪重负。
可操作性:管理员可以在运行时安全地修改队列的定义和诸如容量、ACL等属性,并将对用户的影响降到最低。管理员还可以在运行时增加队列,但不可以在运行时删除队列。用户和管理员还可以通过控制台查看当前分配给各个队列的资源。管理员可以在运行时停止队列以确保正在退出的应用在完成退出前,新的应用程序不能够提交到该队列。如果队列处于STOPPED状态,新应用程序不能够被提交到该队列及其子队列,正在退出的应用继续完成退出过程。管理员还可以启动已经停止的对列。
基于资源的调度:支持资源密集的应用程序,应用程序可指定高于默认值的资源需求,这样应用程序可以有不同的资源需求。当前只支持内存和虚拟CPU内核等资源的设置。

配置

首先配置yarn-site.xml

<property>
	<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

在Capacity Scheduler专属配置文件capacity-scheduler.xml

<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>queuea,queueb</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.queuea.queues</name>
<value>queuea1,queuea2</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.queueb.queues</name>
<value>queueb1,queueb2,queueb3</value>
</property>

配置容量调度的属性

  • yarn.scheduler.capacity…capacity

它是队列的资源容量占比(百分比)。系统繁忙时,每个队列都应该得到设置的量的资源;当系统空闲时,该队列的资源则可以被其他的队列使用。同一层的所有队列加起来必须是100%。

  • yarn.scheduler.capacity…maximum-capacity

队列资源的使用上限。由于系统空闲时,队列可以使用其他的空闲资源,因此最多使用的资源量则是该参数控制。默认是-1,即禁用。

  • yarn.scheduler.capacity…minimum-user-limit-percent

每个任务占用的最少资源。比如,你设置成了25%。那么如果有两个用户提交任务,那么每个任务资源不超过50%。如果3个用户提交任务,那么每个任务资源不超过33%。如果4个用户提交任务,那么每个任务资源不超过25%。如果5个用户提交任务,那么第五个用户需要等待才能提交。默认是100,即不去做限制。

  • yarn.scheduler.capacity…user-limit-factor

每个用户最多使用的队列资源占比,如果设置为50.那么每个用户使用的资源最多就是50%。

发布了44 篇原创文章 · 获赞 7 · 访问量 2163

猜你喜欢

转载自blog.csdn.net/weixin_44273391/article/details/101064133