我想在每个作业的基础上更改集群的reduce插槽容量。也就是说,最初,我为一个任务跟踪器配置了8个reduce槽,所以对于一个有100个reduce任务的作业,将有(8 * datanode number)个reduce任务同时运行。但是对于一个特定的工作,我想把这个数字减少一半,所以我这样做了:
conf.set("mapred.tasktracker.reduce.tasks.maximum", "4");
...
Job job = new Job(conf, ...)
在web UI中,我可以看到对于这个作业,最大减少任务正好是4,就像我设置的那样。然而,hadoop仍然会为每个datanode启动8个reducer。看来我不能这样改变产能了。
我在Hadoop邮件列表中询问,有人建议我可以使用容量调度程序,我该怎么做?
我使用hadoop 1.0.2.
谢谢。
Capacity Scheduler允许您为MapReduce作业指定资源限制。基本上,您必须定义队列,您的作业将被调度到该队列。每个队列可以有不同的配置。
就您的问题而言,在使用容量调度器时,可以指定每个任务的ram限制,以限制给定任务占用的插槽数量。根据文档,目前基于内存的调度只支持Linux平台。
有关此主题的进一步信息,请参阅:http://wiki.apache.org/hadoop/LimitingTaskSlotUsage和http://hadoop.apache.org/docs/stable/capacity_scheduler.html