5

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

4

2 に答える 2

3

Hadoop 2.x 以降、プロパティ名が mapreduce.multipleoutputs.* から 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 でテストおよび検証済み

于 2014-05-15T19:21:18.360 に答える
3

MultipleOutputsのaddNamedOutputユーティリティ メソッドは構成プロパティを構成するだけです。そのため、実行されたジョブのインスタンスを調べて、MultipleOutputs のプロパティを抽出します (JobTracker ページにある job.xml を参照してください)。

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

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

于 2012-03-21T17:49:49.450 に答える