FIFO

  • 早期的Hadoop使用FIFO(先进先出)调度算法,典型情况下,每个作业都会使用整个集群,因此其他作业必须等待。问题是有些生产作业需要及时完成,同时还要保证正在进行较小临时查询的用户能够在合理时间内得到返回结果。
  • 后来,设置了作业优先级的功能,可以通过设置mapred.job.priority属性或者JobClient的setJobPriority()方法来设置优先级。在作业调度器在选择下一个运行作业时,选择优先级最高的作业。然而,FIFO不支持抢占,所以优先级高的作业还需要等待此前已经开始的低优先级作业。MapReduce1.0的默认调度器是最初基于队列的FIFO调度器。

公平调度器

  • 公平调度器的目标是让每个用户公平共享集群能力。如果只有一个作业运行,就能获得集群所有资源。随着提交的作业越来越多,闲置的任务槽会以“让每个用户公平共享集群”这种方式进行分配,公平调度器支持抢占机制。
  • 作业都放在作业池中,在默认情况下,每个用户都有自己的作业池。提交作业数较多的用户,不会因此而获得更多的集群资源。可以用map和reduce的任务槽数来定制作业池的最小容量,也可以设置每个池的权重。
  • 假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。过程如下图所示
    调度器学习(一)
    调度器的使用是通过yarn-site.xml配置文件中的yarn.resourcemanager.scheduler.class参数进行配置的,默认采用Capacity Scheduler调度器。如果我们要使用Fair调度器,需要在这个参数上配置FairScheduler类的全限定名: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。

容器调度器

  • 集群有很多队列组成(类似于公平调度器的任务池),这些队列可能是层次结构(因此,一个队列可能是另一个队列的子队列),每个队列被分配到一定容量。这点与公平调度器相似,只不是在每个队列内部,作业根据FIFO方式(考虑优先级)进行调度。
  • 本质上,容量调度器允许用户或组织(使用队列进行定义)为其模拟出一个使用FIFO调度策略的独立MapReduce集群。
  • 相比之下,公平调度器强制每个池内公平共享,使运行的作业共享资源(实际上也支持作业池内的FIFO作业调度,使其类似于容量调度器)。
    调度器学习(一)

参考:https://www.cnblogs.com/gxc2015/p/5267957.html

相关文章:

  • 2021-09-16
  • 2021-07-30
  • 2021-04-06
  • 2021-11-28
  • 2022-12-23
  • 2021-12-27
  • 2021-11-27
  • 2022-12-23
猜你喜欢
  • 2021-07-14
  • 2021-07-15
  • 2022-12-23
  • 2023-03-30
  • 2021-07-18
  • 2021-12-23
相关资源
相似解决方案