为什么hadoop容量调度程序使用200%的容量

时间:2012-10-15 03:04:24

标签: hadoop scheduler capacity

我在我们的集群上遇到了同样的问题并返回我的电脑做了一些简单的实验,希望弄明白。我在伪分布式模式下配置了hadoop并使用了默认的capacity-scheduler.xml并配置了mapred-site .xml如下:

<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
  <name>io.sort.mb</name>
  <value>5</value>
</property>
 <property>
<name>mapred.job.tracker</name>
 <value>localhost:9001</value>
 </property>
<property>
 <name>mapred.child.java.opts</name>
 <value>-Xmx10m</value>
 </property>
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
</property>
<property>
<name>mapred.queue.names</name>
<value>default</value>
</property>
<property>
<name>mapred.cluster.map.memory.mb</name>
<value>100</value>
</property>
<property>
<name>mapred.cluster.max.map.memory.mb</name>
<value>200</value>
</property>
</configuration> 

Web UI如下所示:

Queue Name  default      
Scheduling Information
Queue configurationfatal
Capacity Percentage: 100.0%
User Limit: 100%
Priority Supported: NO
-------------
Map tasks
Capacity: 2 slots
Used capacity: 2 (100.0% of Capacity)
Running tasks: 1
Active users:
User 'luo': 2 (100.0% of used capacity)
-------------
Reduce tasks
Capacity: 2 slots
Used capacity: 0 (0.0% of Capacity)
Running tasks: 0
-------------
Job info
Number of Waiting Jobs: 0
Number of users who have submitted jobs: 1

实际上,当我提交一个包含2个插槽并且没有减少任务的地图任务的流媒体作业时,它确实没有任何错误。流媒体脚本相当简单

〜/ hadoop / hadoop-0.20.2 / bin / hadoop jar Streaming_blat.jar -D mapred.job.map.memory.mb = 199 -D mapred.job.name ='memory alloc'-D mapred.map .tasks = 1 -input file:// pwd / input / -mapper'/home/luo/hadoop/hadoop-0.20.2/bin/a.out'-output file:// {{1} } / output / -reducer NONE

a.out只是一个C程序,只是将pid和ppid输出到指定的文件。

当我设置mapred.map.tasks = 3时出现了问题。 Web UI显示

pwd

这意味着它已经超出了我在mapred-site.xml中设置的地图槽的限制。结果,它一次又一次地提示这样的东西

Map tasks
Capacity: 2 slots
Used capacity: 4 (200.0% of Capacity)
Running tasks: 2
Active users:
User 'luo': 4 (100.0% of used capacity)

我想要它做的是暂停地图任务,直到有可用的插槽而不超过容量。那我做错了什么?有人可以提供一些解决方案吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

好吧,我自己回答。破解代码后,我知道必须在mapred-site.xml中设置这4个属性,否则调度程序不会执行内存检查(我只设置其中两个)。

mapred.cluster.map.memory.mb
mapred.cluster.reduce.memory.mb
mapred.cluster.max.map.memory.mb
mapred.cluster.max.reduce.memory.mb