0

私の Hapoop ジョブでは、リデューサーの数を 0 に設定すると、マッピング フェーズは、リデューサーの数が 0 でない場合よりも劇的に高速になります。マッピング時間が劇的に増加する理由がわかりません。

4

1 に答える 1

0

レデューサーを構成していない場合、マップ出力はディスクに書き込まれる前にソートされません。

その理由は、Hadoop が外部ソート アルゴリズムを使用しているためです。つまり、map タスクはタスク出力をソートします [1]。次に、リデューサーは、並べ替えられたマップ出力セグメントをマージします。レデューサーがない場合、キーでデータをグループ化する必要はありません。したがって、ソートする必要はありません。

[1] 可能性のあるニットピッカーの追加: map タスクは、出力バッファーがいっぱいになるとソートを開始します。このソートされたセグメントはディスクにスピルされ、マップ タスクの最後に、ソートされた単一のファイルが出現するまで、スピルされた他のすべてのセグメントとマージされます。単一のファイル (場合によっては圧縮されている場合もあります) を送信すると、帯域幅の使用/転送パフォーマンスが大幅に効率的になります。レデューサー側では、ソートされたファイルが再びマージされます。最後のマージ パスは、reduce メソッドに直接ストリーミングされます。

于 2013-10-28T19:46:57.610 に答える