新しい 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
。