我正在尝试加速优化MapReduce作业。
是否有任何方法可以告诉hadoop使用特定数量的mapper/reducer进程?或者,至少是最少数量的映射器进程?
在文档中,您可以使用
方法来完成此操作。public void setNumMapTasks(int n)
.
这种方式并没有过时,所以我用Job类开始Job。正确的做法是什么?
地图任务的数量由输入中的块数量决定。如果输入文件是100MB, HDFS块大小是64MB,那么输入文件将占用2个块。因此,将生成2个地图任务。JobConf.setNumMapTasks()(1)给框架的提示。
reducer的数量由JboConf.setNumReduceTasks()函数设置。这决定了作业的reduce任务总数。此外,mapred.tasktracker.tasks.maximum参数决定了可以在单个作业跟踪器节点上并行运行的reduce任务的数量。
您可以在(2)中找到更多关于地图和减少工作数量的信息
(1) - http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/JobConf.html#setNumMapTasks%28int%29
(2) - http://wiki.apache.org/hadoop/HowManyMapsAndReduces