我正在使用新的 Hadoop API 来编写一系列 map-reduce 作业。我计划使用Oozie将所有这些管道连接在一起,但我似乎无法找到一种方法来从工作流中的一个map-reduce
节点执行多个输出流。
通常要编写多个输出,我会使用类似于MultipleOutputs javadoc中给出的代码的代码,但 oozie 从workflow.xml
文件中获取其所有配置,因此无法像示例中那样配置命名输出。
我遇到了一个讨论在 Oozie 中使用多个输出的线程,但是除了创建 Java 任务并将其直接添加到 Oozie 管道之外,没有其他解决方案。
有没有办法通过map-reduce
节点中的workflow.xml
?
编辑:
克里斯的解决方案确实有效,但我希望有更好的方法。这是我所做的确切更改。
我在 workflow.xml 文件中添加了以下内容:
<property>
<name>mapreduce.multipleoutputs</name>
<value>${output1} ${output2}</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output1}.key</name>
<value>org.apache.hadoop.io.Text</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output1}.value</name>
<value>org.apache.hadoop.io.LongWritable</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output1}.format</name>
<value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output2}.key</name>
<value>org.apache.hadoop.io.Text</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output2}.value</name>
<value>org.apache.hadoop.io.LongWritable</value>
</property>
<property>
<name>mapreduce.multipleoutputs.namedOutput.${output2}.format</name>
<value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value>
</property>
我在启动时提供给 oozie 的 job.properties 文件中添加了以下内容:
output1=totals
output2=uniques
然后在减速器中,我写入了命名的输出totals
和uniques
.