15 ブロックのデータと 2 つのクラスターがあるとします。最初のクラスターには 5 つのノードがあり、レプリケーション ファクターは 1 ですが、2 番目のクラスターのレプリケーション ファクターは 3 です。マップ ジョブを実行すると、マップ ジョブのパフォーマンスや実行時間に何らかの変化が予想されますか?
言い換えれば、レプリケーションはクラスター上のマッパーのパフォーマンスにどのような影響を与えるのでしょうか?
15 ブロックのデータと 2 つのクラスターがあるとします。最初のクラスターには 5 つのノードがあり、レプリケーション ファクターは 1 ですが、2 番目のクラスターのレプリケーション ファクターは 3 です。マップ ジョブを実行すると、マップ ジョブのパフォーマンスや実行時間に何らかの変化が予想されますか?
言い換えれば、レプリケーションはクラスター上のマッパーのパフォーマンスにどのような影響を与えるのでしょうか?
編集:他の回答が編集されたため、私の回答のこの部分は廃止されました:「他の回答は完全には正しくありません。」これは、レプリカが少ないほど並列処理が少ないという誤った意味に対処することを目的としていました。私の答えの残り(以下)はまだ適用されます。
データがそのノードにあるかどうかに関係なく、任意のノードでタスクを実行できます。Hadoop はデータの局所性を達成しようとします (優先順位は、ノードローカル、次にラックローカル、次に任意のノードです) が、それができない場合は、タスクを実行するために利用可能なコンピューティング容量を持つ任意のノードを選択します。
パフォーマンスに関しては、典型的なマルチラック インストールでは、ラック間でデータを送信するときにボトルネックが発生するため、ラック ローカルはノード ローカルとほぼ同じパフォーマンスを発揮します。ただし、ハイエンドのネットワーク機器 (つまり、フル 2 分割帯域幅) を使用すると、計算がラックローカルであるかどうかは問題になりません。詳細については、このペーパーを参照してください。
より多くのレプリカを使用する (したがって、より高いデータ ローカリティを達成する) ことで、どの程度のパフォーマンスの向上を期待できますか? あまりない; 最大 5 ~ 20% の改善。ただし、このプロジェクトやこのプロジェクトのように、追加の人気ベースのレプリケーションを実装する場合、これは上限です。注: これらのパフォーマンス向上の数値は、単に作り上げたものではありません。それらは私がリンクした論文から来ています。
通常の Hadoop にはこれらのメカニズムが備わっていないため、パフォーマンスが最大で 1 ~ 5% 向上すると予想されます。これは大まかな推測にすぎませんが、いくつかのテストは自分で簡単に実行できます。この理由は、より多くのレプリカが一部のマップ タスク (ブロックのデータ ローカル コピーで実行できるようになったもの) のパフォーマンスを向上させる可能性がありますが、シャッフルを改善してフェーズを削減することはできないためです。さらに、1 つのマッパーが他のマッパーよりも時間がかかる場合でも、このマッパーがマップ フェーズ全体の長さを決定します。そのため、多くのジョブでは、ローカリティを増やしても実行時間がまったく改善されない可能性があります。最後に、I/O バウンド ジョブは、マップ入力 IO バウンド、シャッフル IO バウンド (マップ出力が重い)、または出力 IO バウンドを減らすことができます。最初のタイプ (map-input IO バウンド) のみが局所性の恩恵を受けます。MapReduce ワークロードの特徴付けの詳細については、このホワイト ペーパーを参照してください。
これにさらに興味がある場合は、このペーパーを読むこともできます。このペーパーでは、マッパーの実行時間を改善しますが、すべてのマッパーの入力データをメモリに保持しています。