0

OutputFormat のキーと値のペアを 2 回調べる必要がある状況があります。本質的に:

 OutputFormat.getRecordWriter() // returns RecordWriteType1
 ... and when all those are complete across all machines
 OutputFormat.getRecordWriter() // return RecordWriterType2

両方の RecordWriterType1/2 の型付けは同じです。これを行う方法はありますか?

ありがとう、マルコ。

4

1 に答える 1

0

残念ながら、単純にレデューサー データを 2 回実行することはできません。

おそらく回避するためのいくつかのオプションがあります:

  • ID リデューサーを使用して、並べ替えられたデータを HDFS に出力し、ID マッパーを使用してデータに対して 2 つのジョブを実行します。データがそれほど多くない場合は、無駄ですが簡単です。
  • 上記と同じですが、マップのみのジョブとキー コンパレータを使用してレデューサー関数をエミュレートできます。出力ファイルは単一のマッパーで処理され、2 つ以上のマッパー インスタンスに分割されません
  • レデューサーのキー/値をレデューサーのローカル ディスクに書き込んでから、レデューサーのクリーンアップ メソッドでローカル ファイルを開き、2 番目のオプションで説明されているように処理します (グループ コンパレータを使用してキーの境界を決定します)。
  • ReduceTask のソースを掘り下げると、ローカル ディスク上のマージされた並べ替えられたセグメントを「悪用」して、データを再度実行することさえできるかもしれませんが、このオプションは純粋な純粋なハッカーです...
于 2013-01-04T03:11:51.633 に答える