使用oozie为mapreduce作业写入多个输出流的正确方法是什么?

col*_*red 5 java hadoop mapreduce oozie

我正在使用新的Hadoop API编写一系列map-reduce作业.我打算使用Oozie的管线所有的这些结合在一起,但我似乎无法找到一种方法,从做多输出流,map-reduce工作流中的节点.

通常情况下写的多路输出,我会用类似在给定的代码代码MultipleOutputs的javadoc,但Oozie的会从它的所有配置workflow.xml文件,因此命名为输出不能被配置成类似于他们在例子.

我遇到一个线程讨论使用在Oozie的多路输出,但没有提出超出了创建一个Java的任务,它直接增加了Oozie的pipline解决方案.

有没有办法通过这个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>
Run Code Online (Sandbox Code Playgroud)

我将以下内容添加到job.properties文件中,该文件在启动时被提供给oozie:

output1=totals
output2=uniques
Run Code Online (Sandbox Code Playgroud)

然后在reducer中我写了命名输出totalsuniques.

Chr*_*ite 3

MultipleOutputs 的实用addNamedOutput方法只是配置配置属性 - 因此请查看已运行的作业实例并提取 MultipleOutputs 的属性(查看 JobTracker 页面中的 job.xml)。

或者,查看 MultipleOutputs 的源代码并查看调用此方法时正在设置哪些配置属性。

了解要设置的属性后,将它们添加到 Oozie 工作流程中的 map-reduce 元素的配置部分。