2012-03-21 59 views
5

我正在使用新的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 

然後減速器我寫到命名輸出totalsuniques

回答

3

爲MultipleOutputs的addNamedOutput實用方法只是配置配置屬性 - 所以去看看已運行作業的實例,並提取MultipleOutputs的屬性(看看job.xml,從JobTracker的頁面內襯)。

或者,查看MultipleOutputs的源代碼並查看調用此方法時正在設置的配置屬性。

知道設置的屬性後,將它們添加到Oozie工作流中map-reduce元素的配置部分。

+0

這是一個合理的解決方案。我已經測試過它並且工作正常......我將發佈我添加到.properties和workflow.xml中的行,以便答案更加完整。 – coltfred 2012-03-21 19:12:55

2

作爲的Hadoop 2.X屬性名稱已經從mapreduce.multipleoutputs改變*莫*,從而以新的配置屬性現在是這樣的:。

<property> 
    <name>mo.namedOutputs</name> 
    <value>${output1} ${output2}</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 

測試並在Hadoop 2.4驗證.X,Ooize 4.0.0

+0

感謝您的支持。 (我*愛*配置屬性的無盡重命名,這是最好的功能。) – 2015-03-03 05:27:28

相關問題