三种调度器
FIFO Scheduler — FIFO调度器

hadoop1.x默认使用FIFO作为调度器,遵循先进先出原则
Capacity Scheduler — 容量调度器

支持多个队列,某个作业可能被分配提交到一个队列中,每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源
- 空闲资源会被分配给那些未达到资源使用上限的队列。
- 多重租赁,综合考虑多种约束防止单个做个,单个用户会队列独占集群中所有的资源
- 基于资源调度,支持资源密集型作业,允许作业使用的资源量高于默认值,进而可容纳不同资源需求的作业,不过当前只支持内存资源调度
- hadoop2.x默认使用的是容量调度器
使用:配置yarn-site.xml文件中设置yarn.resourcemanager.scheduler.class属性为org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.CapacityScheduler
Fair Scheduler — 公平调度器
定义 - 解释
想象两个用户A和B,分别拥有自己的队列。A启动一个作业,在B没有需求时A会分配到全部可用资源;当A的作业仍在运行时B启动一个作业,一段时间后,按照我们先前看到的方式,每个作业都用到了一半的集群资源。这时,如果B启动第二个做作业且其他作业仍在运行,那么第二个作业将和B的其他作业(这里是第一个)共享资源,因此B的每个作业将占四分之一的集群资源,而A仍继续占用一半的集群资源。最终的结果就是资源在用户之间实现了公平共享。
Fair scheduler配置示例
<!– scheduler start –><property><!-- 配置Yarn使用的调度器插件类名 --><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value></property><property><!-- 配置资源池以及其属性配额的XML文档路径 --><name>yarn.scheduler.fair.allocation.file</name><value>/etc/hadoop/conf/fair-scheduler.xml</value></property><property><!-- 开启资源抢占 --><name>yarn.scheduler.fair.preemption</name><value>true</value></property><property><!-- 设置成true,当任务中未指定资源池的时候,将以用户名作为资源池名。这个配置就实现了根据用户名自动分配资源池。 --><name>yarn.scheduler.fair.user-as-default-queue</name><value>true</value><description>default is True</description></property><property><!-- 是否允许创建未定义的资源池。 --><!-- 如果设置成true,yarn将会自动创建任务中指定的未定义过的资源池。设置成false之后,任务中指定的未定义的资源池将无效,该任务会被分配到default资源池中。--><name>yarn.scheduler.fair.allow-undeclared-pools</name><value>false</value><description>default is True</description></property><!– scheduler end –>
https://www.dazhuanlan.com/2019/11/30/5de18da12bb44/
https://cloud.tencent.com/developer/article/1239472
Capactiy scheduler与Fair scheduler的区别
- 公平调度器是以pool(资源池)为单位来分配任务的slots
容量调度器是以queue队列的方式分配taskTracker的
- 当都只有一个job的时候,两种调度器都可以利用整个集群资源,再pool中可以是以FIFO方式调度也可以FIFO方式调度也可以是公平方式调度,但是在queue中只能以FIFO方式调度
- 在pool内部是支持抢占的,也就是可以为某个pool(通常是生产上的用户)分配最低的任务solt,当这个pool得不到最低资源时,会kill掉其他的job的task以使自己获得最低的资源,这并不会引起其他job的失败,因为可容错
