hadoop公平调度配置详解(一)mapred-site.xml篇

来源:互联网 发布:windows xp更新包 编辑:程序博客网 时间:2024/05/21 22:26

可以在mapred-site.xml中设置下面的参数来影响公平调度器的行为:

基本参数

属性名

描述

mapred.fairscheduler.allocation.file

指定一个XML文件的绝对路径,该文件包含了每个资源池的最小共享资源、每资源池和每用户的并发运行作业数和抢占超时时间。如果没有设置这个属性,这些特性将不会被使用。配额文件格式在稍后描述。

mapred.fairscheduler.preemption

是否启用抢占的布尔值属性。默认是false。

mapred.fairscheduler.poolnameproperty

指定用哪个作业配置属性来决定作业的归属资源池。字符串格式,默认:user.name(即是每个用户一个资源池)。另一个有用的值是group.name,即每个Unix群组一个资源池。一个常用的设定是使用非标准的属性如pool.name作为资源池的名字属性,然后通过添加下面的设定来使user.name成为默认:

<property>

  <name>pool.name</name>

  <value>${user.name}</value>

</property>

这样你就可以对某些作业显式的通过作业配置属性来指定资源池的名字(比如,在有默认用户资源池的情况下,传递 -Dpool.name=<name> 到 bin/hadoop jar)。

高级参数

属性名

描述

mapred.fairscheduler.sizebasedweight

在计算作业的公平共享权重时考虑作业大小。默认情况下,权重只基于作业的优先权。设置这个标志为true会使权重也考虑作业大小(所需任务数),但不是线性的(权重与所需任务数的对数成比例)。这个设定让较大作业在获取更大的公平共享资源的同时也能提供足够的共享资源给小作业,让它们能迅速的完成。布尔值,默认是false。

mapred.fairscheduler.preemption.only.log

这个标志会使调度器在碰到抢占计算时仅简单的记录下它什么时候想抢占一个任务,而不会真正的抢占任务。布尔值,默认是false。这个属性用在启用抢占之前做一个抢占的“dry run”是很有用的,以确保你没把超时时间设置的过于具有侵略性。你会在Jobtracker的输出日志(HADOOP_LOG_DIR/hadoop-jobtracker-*.log)看到抢占日志信息。信息跟下面的相似:

Should preempt 2 tasks for job_20090101337_0001: tasksDueToMinShare = 2, tasksDueToFairShare = 0

mapred.fairscheduler.update.interval

公平共享资源计算更新间隔时间。默认的500毫秒适用于小于500个节点的集群,但较大的值可以减少更大集群的Jobtracker的负载。整数值,单位是毫秒,默认是500。

mapred.fairscheduler.preemption.interval

检查任务抢占的间隔时间。默认的15秒适用于超时时间在分钟数量级上的。不推荐超时时间过小于这个数值,但是如果你已经设置了这样的超时时间,你可以使用这个值来做更多的抢占计算。然而小于5秒的值就太小了,因为它小于心跳的间隔时间了。整数值,单位是毫秒,默认是15000。

mapred.fairscheduler.weightadjuster

一个扩展点,让你指定一个类去调整运行中作业的权重。这个类应当实现WeightAdjuster接口。目前已有一个例子实现——NewJobWeightBooster,它会在作业生命周期中的前5分钟增加作业的权重,以使小作业能更快速的完成。要使用这个例子实现,设置weightadjuster属性为类的全名,org.apache.hadoop.mapred.NewJobWeightBooster。NewJobWeightBooster本身提供了两个参数用于设定持续时间和增长因子。

  • mapred.newjobweightbooster.factor,新作业权重的增长因子,默认是3。
  • mapred.newjobweightbooster.duration,增长持续时间,单位是毫秒。默认是300000,5分钟。

mapred.fairscheduler.loadmanager

一个扩展点,让你指定一个类去决定一个给定TaskTracker上可以运行多少个map和reduce。这个类应当实现LoadManager接口。默认使用Hadoop配置文件中的任务负载,但可以使用这个选项使负载基于如可用内存和CPU利用率。

mapred.fairscheduler.taskselector

一个扩展点,让你指定一个类去决定作业内的哪一个任务运行在给定的tracker上。这个特性可以用来改变本地化策略(比如,让一些作业在特定机架内)或推测(speculative)执行算法(选择什么时候去执行推测任务)。默认的实现使用Hadoop的JobInProgress中的默认算法。


0 0
原创粉丝点击