複数の出力で出力する必要があるマップ レデューサー ジョブがあります。この例のように multipleOutputFormat を使用しています: http://grepalex.com/2013/05/20/multipleoutputs-part1/
課題は次のとおりです。
- パーティショナーが各レデューサーに 1 つのキーを送信すると (キーが個別の出力ファイルを参照すると仮定)、多くのデータを含む一部のレデューサーは永遠にかかります。
- パーティショナーが各レデューサーをランダムに (theKey+randomNumber) 送信すると、多くのレデューサーが複数の出力に書き込み、IO の問題が発生します。
解決策として:
オプション 1: 重量に応じてキーをレデューサーに割り当てます。したがって、すべてのレデューサーの負荷は同じです。(1 つの大きなキーが 5 つの異なるレデューサーに送信され、6 つの小さなキーが単一のレデューサーに送信されます)
オプション 2: 重みに応じてキーを再度割り当てますが、リデューサーがキーを 1 つしか取得できないことを確認します。(1 つの大きなキーは 5 つの異なるキーに送信されますが、6 つの小さなキーは別のレデューサーにも送信されます)
長所短所:
- オプション 1: バランスの取れたレデューサーがありますが、一部のレデューサーは異なるファイル (小さなキー) に書き込みます。
- オプション 2: 不均衡なレデューサーがありますが、レデューサーの最大負荷を制限し、各レデューサーは独自のファイルに書き込みます。
これらのオプションは両方とも、妥当な時間内に実行されます。どちらと一緒に行くべきかについてアドバイスが必要です。
ありがとう