我正在使用新的Hadoop API編寫一系列map-reduce作業。我打算使用Oozie管線所有這些在一起,但我似乎無法找到一個方法來從工作流程中的一個map-reduce
節點做多輸出流。使用oozie爲mapreduce作業寫入多個輸出流的正確方法是什麼?
通常寫多路輸出我會用類似於MultipleOutputs javadoc給出的代碼的代碼,但Oozie的會從workflow.xml
文件的所有配置,以指定的輸出不能被配置成類似於他們在例子。
我遇到過一個thread討論在Oozie中使用多個輸出,但是除了創建Java任務並直接將其添加到Oozie管道之外,沒有提出任何解決方案。
是否有通過在workflow.xml
一個map-reduce
節點的方式呢?
編輯:
克里斯的解決方案做了工作,但我希望能有一個更好的辦法。以下是我所做的確切更改。
添加以下到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
。
這是一個合理的解決方案。我已經測試過它並且工作正常......我將發佈我添加到.properties和workflow.xml中的行,以便答案更加完整。 – coltfred 2012-03-21 19:12:55