4、delay Scheduler机制
当出现空闲slot时,如果排在队列前面的job对应的所有task均没有locality属性(数据的本地性),则该作业会延时调度,直到一段时间后(有新的slot被释放),该job出现locality的task或者发生超时,才不得不调度该job的task。
什么是locality属性?当出现空闲slot时,该slot来自某个节点,而该节点上存有部分数据,如果某个task所需要的数据正好位于该节点上,则将该slot分配给该task是非常好的,因为它避免了通过网络读取数据。
5、公平共享计算方法
公平共享量是基于最小共享量和共享资源量计算得到的,它反映的是某个pool经过资源共享(某些pool的资源用不了,会自动共享给其他pool)之后,一共可以获取的资源总量,一般会大于等于最小共享量。
如果每个pool没有配置最小共享量,且提交了无限量的作业,则让每个pool的slotsAssinged/weight值相同即可。(其中slotsAssgined表示分配给pool的slot数,weight表示pool的权重)。
而有了最小共享minShare和pool中的需求量demand后,计算公平共享量FairShare需注意一下两种情况:
某些pool中的最小共享量可能用不完;
某些pool的资源需求量大于其最小共享量;
考虑到以上两种情况,调度器设计了基于比率R的公平资源分配方法(设集群中资源总量为totalSlots):
如果一个pool中的demand<R*weight,则该pool的fairShare=demand;
如果一个pool中的minShare>R*weight,则该pool的fairShare=mindshare;
除此之外,所有pool的fairShare=R*weight;
所有pool的fairShare之和应为totalSlots;
通过以上算法计算的公平共享量即为“公平调度器”的“公平”含义之所在,应尽量保证每个pool获取的资源量为fairShare,如果一定时间限制内达不到,则抢占资源。通过图表表示算法如下:

注意:比率R表ght-to-slot,即weight与slot的映射关系,其计算方法采用了二分枚举算法,具体实现请查看源代码。R需要取得一个合适的值,使得上面的条件【4】成立。
6、公平调度器缺点
当前公平调度器不支持大内存作业,而capacity Scheduler则早支持了,其原理是:如果一个job需要较大内存,调度器会为该job分配多个slot,这样,作业可使用这些slot对应的内存资源。
7、配置实例
配置步骤为:
1.将$HADOOP_HOME/contrib/fairscheduler/hadoop-fairscheduler-0.20.2-cdh3u3.jar拷贝到$HADOOP_HOME/lib文件夹中
2.修改$HADOOP_HOME/conf/mapred-site.xml配置文件
##配置MapReduce的资源调度方式
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.FairScheduler</value>
</property>
##配置加载公平调度的配置文件
<property>
<name>mapred.fairscheduler.allocation.file</name>
<value>/home/hadoop/hadoop-0.20.2-cdh3u3/conf/fair-scheduler.xml</value>
</property>
##开启公平调度的资源抢占
<property>
<name>mapred.fairscheduler.preemption</name>
<value>true</value>
</property>
##开启公平调度的多模式
<property>
<name>mapred.fairscheduler.assignmultiple</name>
<value>true</value>
</property>
<property>
<name>mapred.fairscheduler.poolnameproperty</name>
<value>mapred.queue.name</value>
<description>job.set("mapred.queue.name",pool); // pool is set to either 'high' or 'low' </description>
</property>
<property>
<name>mapred.fairscheduler.preemption.only.log</name>
<value>true</value>
</property>
<property>
<name>mapred.fairscheduler.preemption.interval</name>
<value>15000</value>
</property>
<property>
<name>mapred.queue.names</name>
<value>default,hadoop,hive</value>
</property>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37299-9.html
预计
人渣一个说