【发布时间】:2012-03-12 18:11:34
【问题描述】:
我是 hadoop 的新手,我对 map-reduce 编程的风格很熟悉,但现在我遇到了一个问题:有时我只需要 map 的工作,我只需要直接将 map 结果作为输出,这意味着这里不需要减少阶段,我怎样才能做到这一点?
【问题讨论】:
我是 hadoop 的新手,我对 map-reduce 编程的风格很熟悉,但现在我遇到了一个问题:有时我只需要 map 的工作,我只需要直接将 map 结果作为输出,这意味着这里不需要减少阶段,我怎样才能做到这一点?
【问题讨论】:
如果您使用 oozie 作为调度程序来管理您的 hadoop 作业,那么您只需将属性 mapred.reduce.tasks(这是每个作业的默认减少任务数)设置为 0。您可以将映射器添加到属性mapreduce.map.class,也不需要添加属性mapreduce.reduce.class,因为不需要reducer。
<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>
【讨论】:
当您需要仅从终端使用映射器启动作业时,它会很有帮助。您可以通过在 hadoop jar 命令中隐式指定 0 个减速器来关闭减速器:
-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”。
【讨论】:
这会关闭减速器。
job.setNumReduceTasks(0);
【讨论】:
【讨论】: