4

Hadoopのパフォーマンスチューニングを行っているときに、非常に奇妙なケースが発生しています。大きな中間出力(InvertedIndexやコンバイナーなしのWordCountなど)でジョブを実行していましたが、ネットワークと計算リソースはすべて同種です。mapreduceの仕組みによると、WAVESが多い場合タスクを減らす場合、マップとシャッフルのオーバーラップが少なくなるため、全体の実行時間は遅くなりますが、そうではありません。5 WAVEのreduceタスクを使用したジョブは、1 WAVEのタスクを使用したジョブよりも約10%高速であることがわかります。また、ログを確認したところ、reduceタスクが少ないほどマップタスクの実行時間が長くなり、また、reduceフェーズ中の全体的な計算時間(シャッフルやマージではない)がタスクが少ないほど長くなることがわかりました。マップとシャッフルが重複しないようにreduceslow-startfactorを1に設定して他の要素を除外しようとしました。また、同時に実行されるreduceタスクを1つだけに制限して、重複がないようにしました。リデュースタスクの合間に、スケジューラーを変更して、マッパーとレデューサーを別のマシンに配置するように強制し、I/Oの輻輳が発生しないようにしました。上記のアプローチでも、同じことが起こります。(また、マップメモリ​​バッファーを十分に大きく設定し、io.sort.factorを32以上に設定し、それに応じてio.sort.mbを320より大きく設定しました)

この問題を引き起こす他の理由は本当に考えられないので、何か提案をいただければ幸いです。

混乱した場合に備えて、私が経験している問題は次のとおりです。

0.他のすべての同じ構成で、同じジョブの1つのreduceタスクと5つのreduceタスクを実行した場合のパフォーマンスを比較しています。計算を減らすためのタスクトラッカーは1つだけです。

1.どちらの場合もredcueタスク用のtasktrackerを1つだけ持つことで、すべてのreduceタスクを順番に実行するように強制しました。また、mapred.tasktracker.reduce.tasks.maximum = 1なので、reduceフェーズ中に並列処理は発生しません。

2. mapred.reduce.slowstart.completed.maps = 1を設定したので、すべてのマップが完了する前に、どのレデューサーもデータのプルを開始しません。

3. 1つのreduceタスクを持つことは、5つのSEQUENTIALreduceタスクを持つことよりも遅いことがわかります。

4. set mapred.reduce.slowstart.completed.maps = 0.05を設定して、マップとシャッフルのオーバーラップを許可した場合でも(したがって、reduceタスクが1つしかない場合は、オーバーラップが大きくなり、実行速度が速くなります。削減タスクは順次実行されます)5-削減タスクは1-削減タスクよりも高速であり、1-削減タスクのマップフェーズは遅くなります!

4

4 に答える 4

0

ジョブに単一障害点があるよりもレデューサーが 1 つしかない場合、これは予想どおりです。レデューサーの数は、容量の約 90% に設定する必要があります。reduce スロットの数にノードの総数を掛けることで、reduce 容量を見つけることができます。適用可能な場合は、コンバイナーを使用することも良い方法であることがわかりました。

于 2012-05-01T13:05:29.797 に答える
0

これは問題ではありません。削減タスクが多いほど、データの処理速度が速くなります。

map フェーズの出力は reducer に送信されます。レデューサーが 2 つある場合、負荷は 2 つのレデューサー間で分散されます。

wordcount の例の場合、count が分割された 2 つの別個のファイルが作成されます。そのため、合計を手動で追加するか、多数の削減タスクがある場合は、別のマップ削減ジョブを実行して合計を計算する必要があります。

于 2012-05-01T05:39:31.327 に答える
0

reduce タスクが 1 つしかない場合、その reducer はすべてのマッパーが終了するまで待機する必要があり、シャッフル フェーズではすべての中間データを収集して、その 1 つの reducer にリダイレクトする必要があります。そのため、reducer が 1 つしかない場合、マップとシャッフルの時間が長くなるのは当然であり、全体の時間も長くなります。

ただし、より多くのレデューサーがある場合、データは並行して処理されるため、高速になります。繰り返しになりますが、リデューサーが多すぎると、シャッフルされるデータが多すぎて、ネットワーク トラフィックが増加します。したがって、バランスのとれた最適なレデューサーの数を見つける必要があります。

于 2012-05-01T13:09:22.420 に答える