在Hadoop中,MapReduce的调度器可以选择。默认的调度器是原始的基于队列的FIFO调度器,还有两个用户调度器,分别名为Fair Scheduler和Capacity Scheduler。
5.1.Fair Scheduler(facebook)
Fair Scheduler的目标是让每一个用户公平地共享集群能力。如果只有一个作业在运行,他会得到集群的所有资源。随着提交的作业越来越多,空闲的任务槽会以“让每个用户公平共享集群”这种方式进行分配。某个用户的一个短的作业将在合理的时间内完成,即便另一个用户的长时间作业正在运行而且还在运行过程中。
作业都被放在作业池中,在默认情况下,每个用户都有自己的作业池。提交作业数超过另一个用户的用户,不会因此而比后者获得更多集群资源。可以用map和reduce的任务槽数来定制作业池的最小容量,也可以设置每个池的权重。
Fair Scheduler支持抢占,所以,如果一个池在特定的一段时间内未得到公平的资源共享,他会中止运行池中得到过多资源的任务,以便把任务槽让给运行资源不足的池。
Fair Scheduler是一个后续模块。要使用它,需要将其JAR文件放在Hadoop的类路径,即将它从Hadoop的contrib/fairsheduler目录复制到lib目录。随后,像下面这样配置mapred.jobtracker.taskScheduler属性:org.apache.hadoop.mapred.FairScheduler。
1、总结来说,公平调度主要有一下特点:
①支持多用户多队列;②资源公平共享(公平共享量由优先级决定);③保证最小共享量;④支持抢占资源;⑤限制作业并发量,以防止中间数据塞满磁盘;⑥添加delay Scheduler机制,使调度策略更优;⑦每个队列的调度策略(提交到队列的job)可以配置,支持两种调度策略,分别是FIFO(按照job优先级高低调度,job优先级越高,则会优先调度运行)和FAIR(公平调度算法,job同时运行,但是会按照job的优先级分配资源,job的优先级越高分配到的资源越多)。
2、先了解几个概念:
①Pool:资源池,或者作业池。每个pool里有一定量的资源(管理员配置),每个用户属于某个pool,其作业可使用这个pool中的资源,可限定每个pool中最大并发作业数和每个用户最多提供作业数。默认情况下,一个linux用户对应一个pool,而管理员也可以配置一个linux group对应一个pool。Pool实际上也可以称为group或者队列。
②最小共享量:管理员可给每个pool配置一个最小共享量,调度器在分配资源时,需要保证每个pool中的作业至少获取该数目的资源。一个常见的应用场景是,对产品pool设置最小共享量,而测试pool不设置。这样,当可用资源有限时,优先保证产品pool有资源可用。
③公平共享量:当集群中存在多个pool时,某些pool中的资源可能用不了,这时候调度器会自动将这些pool中剩余的资源共享给其他需要的pool,其他这些pool获取的共享资源多少主要由其pool weight决定,pool weight越大,获取的资源越多。一个pool的最小共享量加上其获取的共享资源数目,就是公平共享量。
3、资源抢占
当一定时间(管理员配置)内,某个pool中获取的资源量少于最小共享量,或者公平共享量的一半,则调度器会找出哪个pool抢占了该pool的资源,并杀死相应数量的task以抢占资源。之所以要进行抢占,还是为了“公平”,即:保证每个pool能获取到它应得到的资源。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37299-8.html
不懂什么叫升级改造吗