0

Partitioner と MultipleOutputs についてご意見をお聞かせください。
次のようなキーを含むファイルがあるとします

0:aaa  
1:bbb  
0:ccc  
0:ddd  
...  
1:zzz  

2 つのファイルが必要です。1 つは で始まるキーを含むファイル0:で、もう1 つは で始まるキーを含むファイルです1:。どのアプローチを使用する必要がありますか:
1) キーを解析し、getPartition() に対して 0 または 1 を返すカスタム パーティショナーを使用します。
2)キーを解析し、MultipleOutputs.write のパラメーター に対してorを指定することにより、reduce フェーズでMultipleOutputs.writeを使用します。zeroonenamedOutput

どちらの方がよいですか?私にとっては、レデューサーは単一のファイルを処理するため、1) の方が優れています。

4

2 に答える 2

0

入力ファイルを 2 つの部分に分割するだけの場合は、(マップのみのジョブを実行することで) シャッフル / 並べ替えフェーズを節約できるため、MultipleOutputs を使用することをお勧めします。

多くの入力ファイルがあり、出力ファイルの数を入力の 2 倍にしたくない場合は、パーティショナー ベースのアプローチを使用すると、入力ファイルを 2 つの出力に統合できます (ただし、適切な名前は付けられません)。 、MultipleOutputsのもう1つの利点ですが、レデューサーでMultipleOutputsとLaxyOutputFormatを使用して、空のpart-rファイルが出力として書き込まれないようにすることで、これを簡単に修正できます)。

答えは、入力ファイルの数と必要な出力ファイルの数によって異なります。

于 2013-12-01T21:10:06.593 に答える