4

マッパーがレデューサーごとに1つのパーティションを生成することを理解しています。レデューサーはどのパーティションをコピーするかをどのように知るのですか?単語数プログラム用のマッパーを実行している2つのノードがあり、2つのレデューサーが構成されているとします。各マップノードが2つのパーティションを生成し、両方のノードにキーと同じ単語が含まれている可能性がある場合、レデューサーはどのように正しく機能しますか?

例:

ノード1がパーティション1とパーティション2を生成し、パーティション1に「WHO」という名前のキーが含まれている場合。

ノード2がパーティション3とパーティション4を生成し、パーティション3に「WHO」という名前のキーが含まれている場合。

パーティション1とパーティション4がレデューサー1に移動した(そしてレデューサー2に残っている)場合、レデューサー1はどのようにして正しい単語数を計算しますか?

これが不可能で、パーティション1と3がレデューサー1に移動する場合、Hadoopはこれをどのように実行しますか?異なるノードからの特定のキーと値のペアが常に同じレデューサーに送られるようにしますか?もしそうなら、それはどのようにこれを行いますか?

ありがとう、Suresh。

4

1 に答える 1

4

あなたの状況では、パーティション1とパーティション3の両方にキー「WHO」があるため、2つのパーティションが同じレデューサーに送られることが保証されます。

アップデート

Hadoopでは、一度に1つのタスクトラッカーが1つのreduceタスクの最大数は、mapred.tasktracker.reduce.tasks.maximumプロパティによって決定されます。
そして、MapReduceジョブのレデューサーの数は次のように設定されます-D mapred.reduce.tasks=n

複数のレデューサーがある場合、マップタスクは出力をパーティション化し、それぞれがリデュースタスクごとに1つのパーティションを作成します。各パーティションには多くのキー(およびそれらに関連する値)が存在する可能性がありますが、特定のキーのレコードはすべて1つのパーティションにあります。パーティショニングはユーザー定義のパーティショニング関数で制御できますが、通常はデフォルトのパーティショナー(ハッシュ関数を使用してキーをバケット化する)が非常にうまく機能します(Hadoop:最も信頼のおけるガイド)

したがって、指定されたキーを持つ値は常に同じレデューサーに送られます。

于 2012-05-10T05:41:33.237 に答える