我是hadoop的新手,我对map-reduce编程的风格越来越熟悉了,但现在我遇到了一个问题:有时候我只需要映射一个工作,我只需要将地图结果直接作为输出,这意味着在这里不需要减少相位,我该如何实现呢?
答案 0 :(得分:58)
这会关闭减速器。
job.setNumReduceTasks(0);
答案 1 :(得分:8)
您还可以使用IdentityReducer:
http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/lib/IdentityReducer.html
答案 2 :(得分:4)
当您需要仅使用来自终端的映射器启动作业时,这非常有用。您可以通过隐式指定hadoop jar命令中的0 reducer来关闭Reducer:
-D mapred.reduce.tasks=0
结果命令如下:
hadoop jar myJob.jar -D mapred.reduce.tasks=0 -input myInputDirs -output myOutputDir
为了向后兼容,Hadoop还支持“-reduce NONE”选项,相当于“-D mapred.reduce.tasks = 0”。
答案 3 :(得分:0)
如果您将oozie用作管理您的hadoop作业的调度程序,则只需将属性mapred.reduce.tasks(这是每个作业的减少任务的默认数量)设置为0。您可以在该属性为mapreduce.map.class,并且由于不需要缩减器,因此无需添加属性mapreduce.reduce.class。
<configuration>
<property>
<name>mapreduce.map.class</name>
<value>my.com.package.AbcMapper</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>0</value>
</property>
.
.
.
<configuration>