3

そのため、適切な削減フェーズでの主な考えは、適切なパーティションの分散です。しかし、たとえば、それを制御できない、またはこれを行う方法がわからない (データがわからない)。

レデューサーが大量にあると、レデューサーごとのデータ分散が改善される可能性が高くなりますか? この質問の一般的な方法は何ですか?

4

2 に答える 2

1

データは通常、モジュラス ハッシュ パーティショニングを使用してレデューサー間で均等に分散されます。これは、キーのハッシュがレデューサーの数で除算され、余りが値が送信されるレデューサーのインデックスであることを (事実上) 意味します。たとえば、キーのハッシュが 47269893425623 で、レデューサーが 10 個ある場合、47269893425623 % 10 = 3 となるため、4 番目のレデューサー (インデックスが 0 であることを思い出してください) がそのレコードを取得します。

レコードにホットスポット キーがある場合、つまり値の大部分がまったく同じキーを持っている場合、レデューサーを追加してもおそらく役に立たないでしょう (オーバーヘッドが追加されるだけです。これらのキーはすべて同じレデューサーに送られます)。 )。

そのような状況でない場合は、レデューサーを追加すると役立つ場合があります。マッパーとリデューサーの間にネットワーク コピー ステージがあることを覚えておいてください。レデューサーを分割すればするほど、マッパーとレデューサーの間でより多くのコピーを行う必要があるため、ジョブの一部が遅くなります。

于 2012-06-14T19:57:24.700 に答える
0

レデューサーの数を選択することは、ある意味では科学というより芸術です。さまざまなことを試して、特定の仕事に最適なものを見つける必要があります.

一般的に、いくつかの主要なオプションがあります。

  • 1 ~ 2 個のレデューサー -- これは、後処理をより効率的にするためにいくつかのファイルを出力するだけで便利な、少量の出力を伴うジョブに適しています。
  • システムの削減スロットの 95% -- これにより、中規模および大規模の MapReduce ジョブの両方でクラスターが完全に利用されます。小さいジョブの終了をブロックしないように、95% を使用します。
  • システム上の削減スロットの 190% -- これは、非常に大きなジョブの場合のみであり、あまり頻繁に使用する必要はありません。

レデューサーの数を増やしても、それほど効果はありません。数学的な意味では、を除いてすべてのキーが均等に分散されていると仮定しますhotkey。次に、指定されたレデューサーの配布hotkeyは100MBで、他のすべては100MBです(極端に言えば)。レデューサーが 2 つある場合、約 150MB のレデューサー 1 と 50MB のレデューサー 2 があります。3 つのレデューサーを使用すると、133MB (100MB + 33MB) のレデューサーが 1 つ、33MB のレデューサーが 2 つになります。レデューサーが 100 個ある場合、1 つが 101MB で、残りはすべて 1MB です。ご覧のとおり、レデューサーの数を増やしてもあまり効果はありませんが、少しは効果があります。おそらく、それを本当に薄く広げるには十分ではありません。


ホットスポットは、多くのジョブにとって問題にはなりません。デフォルトのパーティショニング動作は、比較的均一な分散を提供するために完全に合理的です。

スカッシュしようとしているホットスポットまたは非常に歪んだデータ セットがある場合は、カスタム パーティショナーを作成して、データがレデューサーに送られる特別なルールを作成できます。たとえば、ホット スポットである 3 つのキーがあることがわかっている場合、キー 1 をレデューサー 1 に、キー 2 をレデューサー 2 に、キー 3 をレデューサー 3 に送信し、他のすべてを他のレデューサーに送信するパーティショナーを作成できます。

于 2012-06-14T20:03:42.950 に答える