2012-05-01 10 views
4

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

私は実際には何も考えることができませんこの問題の原因となる他の理由は、どんな提案でも大歓迎です!

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

0私は他のすべての同じ構成の下で同じジョブのタスクを減らす5対タスクを減らす1を実行しているのパフォーマンスを比較しています。削減計算のためのタスクトラッカーは1つだけです。私はすべての両方のケースでredcueタスクの一つだけtasktrackerを有することによって、順次実行されるタスク、およびmapred.tasktracker.reduce.tasks.maximum = 1を減少させるので、任意の存在しないであろうが余儀なくされてい

1時の並列処理は、私はすべてのマップが

3を実行される前に、その減速のどれもそれがデータをプルするために開始しませんmapred.reduce.slowstart.completed.maps = 1を設定している相

2を削減します1つのタスクを減らすことは、5つのタスクを減らすことよりも遅いことが判明しました!私は地図&シャッフル間の重複を許可するように設定mapred.reduce.slowstart.completed.maps = 0.05を設定しても

4、(従ってオーバーラップがよりあるべきであり、それが必要、タスクを一つだけ減らすことがある場合5削減タスクが順番に実行されているため)、5削減タスクはまだ1削減タスクよりも速く、1削減タスクのマップフェーズは遅くなります。

Chenyu

答えて

0

これは問題ではありません。削減するタスクが増えるほど、データが高速に処理されます。

マップフェーズの出力は、レデューサーに送信されます。 2つの減速機がある場合、負荷は2つの減速機の間に分散されます。

wordcountの例では、2つの別々のファイルをcountで区切っています。したがって、手動で合計を追加するか、別のマップ削減ジョブを実行して、多くの削減タスクがある場合は合計を計算する必要があります。

+0

申し訳ありません申し訳ありませんが、私の説明には混乱があります。私は、削減するタスクトラッカーを1つしか使用せず、mapred.tasktracker.reduce.tasks.maximum = 1を設定して、同時に実行される2つの削減タスクがないので、タスクを減らすことの間に並列性がないことを強制しました。とにかくお返事ありがとうございます。 – cyw

0

これは、あなたの仕事がシングルポイント障害であるよりも単一のレデューサーしかない場合、これは予想どおりです。減速機の数は約90%の容量に設定する必要があります。減らすスロットの数に、ノードの総数を掛けて、容量を減らすことができます。私は、適用可能であれば、コンバイナを使用することも良い習慣であることを発見しました。

+0

ご返信ありがとうございます。しかし、ジョブ・ログによれば、タスクやノード・レベルの障害はなく、削減フェーズ中に投機的実行をオフにしています。 – cyw

0

タスクを1つだけ減らした場合、そのレデューサーはすべてのマッパーが終了するまで待つ必要があり、シャッフルフェーズではその1つのレデューサーだけにリダイレクトされるすべての中間データを収集する必要があります。だから、マップとシャッフルの時間が大きいことは当たり前ですが、還元剤が1つだけの場合は全体の時間も同じです。

しかし、より多くのレデューサーがあれば、データは並行して処理されるため、処理が高速になります。繰り返しますが、還元剤が多すぎると、あまりにも多くのデータがシャッフルされ、ネットワークトラフィックが増加します。だからあなたは良いバランスを与える減速機の最適な数を見つける必要があります。

+0

申し訳ありません私は減量タスクの "波"のいくつかの誤解があると思います。私は1波の削減タスクを言うと、各タスクトラッカーに1つの削減タスクがあり、各タスクトラッカーに3つのタスクを削減し、各タスクトラッカーが最大で1つのタスクを一度に処理できる場合、これを削減タスクの3つの波。ここでは、削減のためにタスクトラッカーを1つだけ使用しています。各タスクトラッカーで実行可能な最大の削減タスクを1に設定しました。とにかくあなたの返事のための混乱と感謝のため申し訳ありません。 – cyw

0

リダクション数は、0.95または1.75 *(ノード*マップド・タスク・トラッカー・タスク・マキシム)と思われます。 0.95では、すべてのリダクションが即座に開始され、マップの出力が完了するとマップ出力の転送が開始されます。 1.75では、より高速なノードが最初の削減を完了し、ロードバランシングのはるかに優れた作業を行う2回目の削減を開始します。

礼儀:

http://wiki.apache.org/hadoop/HowManyMapsAndReduces

Setting the number of map tasks and reduce tasks

(同様の質問ワースが答えを解決)

は、この情報がお役に立てば幸い!

関連する問題