2019/2/19 星期二

yarn任务调度--capacity scheduler(容量调度) / fair scheduler(公平调度) 由于集群资源有限,当无法满足众多application 的资源请求时,yarn 需要适当的策略对application 的资源请求进行调度; Scheduler 概述 Yarn 中实现的调度策略有三种:FIFO/Capacity/Fair Schedulers (1)FIFO Scheduler:

将所有application 按提交的顺序排队,先进先出 优点---->简单易懂且不用任何配置 缺点---->不适合于shared clusters;大的应用会将集群资源占满从而导致大量应用等待 小结: 1、一个队列可以使用yarn的全部资源; 2、后提交的任务必须等前面的任务运行完成之后,才可以得到资源并执行。 3、先进先出,同一时间队列中只有一个任务在执行

FIFO调度器

(2)Capacity Scheduler //此部分查看参考链接 讲的很详细 容量调度器

将application 划分为多条任务队列,每条队列拥有相应的资源 在队列的内部,资源分配遵循FIFO 策略队列资源支持弹性调整:一个队列的空闲资源可以分配给“饥饿”队列(注意:一旦之前的空闲队列需求增长,因为不支持“先占”,不能强制kill 资源container,则需要等待其他队列释放资源;为防止这种状况的出现,可以配置队列最大资源进行限制) 任务队列支持继承结构 小结: 最大化集群吞吐量 •核心思想 –集群资源由多个队列分享 –空闲队列可以把资源“借”给忙队列 –需要时可以取回 •调度策略 –应该获得的资源/实际获得的资源,选择比值最低的队列 –队列内FIFO –考虑限制:单个用户使用资源、使用其他队列资源

容量调度器 容量调度器:多队列;每个队列内部先进先出,同一时间队列中只有一个任务在执行。 队列的并行度为队列的个数。

(3)Fair Scheduler

不需要为特定small application 保留资源,而是在需要执行时进行动态公平分配;动态资源分配有一个延后,因为需要等待large job 释放一部分资源 Small job 资源使用完毕后,large job 可以再次获得全部资源 Fair Scheduler 也支持在application queue 之间进行调度 小结: 多用户公平共享集群资源 •作业池 –每个用户单独资源池 –作业放进共享资源池 –每个作业最低资源保障 •调度策略 –默认FIFO –队列内调度策略可配置

//Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。在上面的“Yarn调度器对比图”展示了一个队列中两个应用的公平调度;当然,公平调度在也可以在多个队列间工作。举个例子,假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。

公平调度器 公平调度器:多队列;每个队列内部按照缺额大小分配资源启动任务,同一时间队列中 有多个任务执行。队列的并行度大于等于队列的个数。 3)一定要强调生产环境中不是使用的 FifoScheduler,面试的时侯会发现候选人大概了解这 几种调度器的区别,但是问在生产环境用哪种,却说使用的 FifoScheduler(企业生产环境一 定不会用这个调度的)

参考链接: http://www.mamicode.com/info-detail-1097801.html Hadoop 的三种调度器FIFO、Capacity Scheduler、Fair Scheduler: https://blog.csdn.net/xiaomage510/article/details/82500067 Fair Scheduler与Capacity Scheduler比较 https://blog.51cto.com/qishi23/1599138