我在我们的集群上遇到了同样的问题,回到我的pc上做了一些简单的实验,希望能解决这个问题。我在伪分布式模式下配置了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
实际上,当我提交了一个流式作业,其中一个map任务占用2个槽位,没有reduce任务时,它没有任何错误
~/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-输入文件:// pwd
/input/-mapper'/home/luo/hadoop/hadoop-0.20.2/bin/a.out'-输出文件:// pwd
/输出/减速器无
a、 out只是一个c程序,它简单地将pid和ppid输出到指定的文件中。
当我设置mapred.map.tasks=3时,问题来了。web ui显示
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)
这意味着它已经超过了我在mapred-site.xml中设置的Map槽的限制。结果,它一次又一次地引发了类似的事情
Killing one of the least progress tasks - attempt_201210121915_0012_m_000000_0, as the cumulative memory usage of all the tasks on the TaskTracker exceeds virtual memory limit 207618048.
我想让它做的是暂停map任务,直到有可用的插槽而不超过容量?有谁能提供一些解决方案吗?谢谢。
1条答案
按热度按时间ef1yzkbh1#
好的,我自己回答。破解代码后,我知道这4个属性必须都在mapred site.xml中设置,否则调度程序不会执行内存检查(我只设置了其中的两个)。