2012-03-21 3 views
5

新しいHadoop APIを使用して一連のmap-reduceジョブを作成しています。私はOozieを使用してこれらのすべてをパイプライン化する予定ですが、ワークフローのmap-reduceノードから複数の出力ストリームを実行する方法を見つけることができません。oazieを使用してmapreduceジョブの複数の出力ストリームに書き込む正しい方法は何ですか?

通常、複数の出力を書き込むには、MultipleOutputs javadocのコードに似たコードを使用しますが、oozieはすべての設定をworkflow.xmlファイルから取得して、名前付き出力を例のように構成することはできません。

Ozaieで複数の出力を使用することについて議論しているthreadが出てきましたが、Javaタスクを作成してOozieのpiplineに直接追加するという解決策はありませんでした。

map-reduceノード経由でworkflow.xmlの方法がありますか?

編集:私はより良い方法があったことを望むものの

クリスのソリューションは、仕事をしました。ここに私が作った正確な変更があります。

Iはworkflow.xmlファイルに以下を加え:に続い

output1=totals 
output2=uniques 

:私は起動時にoozieに供給されるjob.propertiesファイルに以下を添加

<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> 

私は指定された出力totalsuniquesに書きました。

答えて

3

addNamedOutput MultipleOutputsのユーティリティメソッドは構成プロパティを設定するだけなので、実行したジョブのインスタンスを見て、MultipleOutputsのプロパティを抽出します(Job.xml内のJobTrackerページにあります)。

または、MultipleOutputsのソースを調べ、このメソッドを呼び出すときに設定されている構成プロパティを確認します。

プロパティが設定されていることがわかったら、それらをOozieワークフローのmap-reduce要素の構成セクションに追加します。 Hadoopののよう

+0

これは合理的な解決策です。私はそれを試して、それは動作します...私は私が私のプロパティとworkflow.xmlに追加された行を投稿するので、答えはもう少し完全です。 – coltfred

2

プロパティ名はmapreduce.multipleoutputsから変更されているから2.x * MOに*、新しい構成プロパティは、次のようになりますように:。。

<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

ありがとうございます。 (私は、設定プロパティの無限の名前変更を愛しています。それが最高の機能です)。 –

関連する問題