Hadoop中作业调度器有三种,分别是先进先出调度器(FIFO)、公平调度器(Fair Scheduler)、容量调度器(Capacity Scheduler),默认是FIFO调度器。
先进先出调度器(FIFO)
按照作业提交的顺序运行作业,每个作业都会使用整个集群,因此作业必须等待直到轮到自己运行。这时,如果共享集群资源就有可能为多用户提供大量的资源,但是又如何分配资源以达到最后情况呢。这时候出现了设置作业优先级功能,可以通过mapreduce.job.priority属性或者Job的setJobPrioity()来设置优先级,可选择的有:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW。但是在FIFO中设置作业优先级,没有作用,因为他不支持抢占,所以高优先级的作业还是要依赖先进入队列的低优先级作作业执行完毕后执行。
公平调度器(Fair Scheduler)
公平调度器目标是让每个用户公平共享集群的能力。如果只有一个作业,则这个作业会的到集群中所有的资源,随着作业数的增多,在MR1中闲置的任务槽会以"每个用户公平共享集群"这种方式分配。默认请款下每个用户都有自己的作业池,但不会因为作业数多就得到更多的资源(所以,他是以用户级别为单位进行资源分配的)。公平调度器支持抢占式机制,如果一个作业池一段时间未能公平共享集群资源,就会终止运行池中得到过多的资源的任务,把空任务槽给运行资源不够的作业池。
在使用公平调度器时,要将其放到hadoop类路径下,即lib目录下。然后设置mapreduce.jobtracker.taskshceduler属性为:org.apache.hadoop.mapreduce.FariScheduler。如果需要充分发挥其优势需要读取官方文档
容量调度器(Capacity Scheduler)
集群由多队列组成,这些队列可能是层次结构的,为每个队列分配一定的容量。在每个队列内部,根据FIFO方式进行调度。容量调度器允许用户或组织模拟出一个使用FIFO调度策略的独立MapReduce集群。