n 候補のリストから n*(n-1)/2 候補ペアを生成する必要があります。
これは、すべてのマッパー インスタンスまたはすべてのレデューサー インスタンスで実行できます。
しかし、この操作が縮小フェーズで実行された場合、マップ フェーズで実行されたよりもはるかに高速であることに気付きました。理由は何ですか?
マッパーは重い計算をサポートできませんか?
Mapper インスタンスがネットワーク上でこのような計算を行うと、どのような影響がありますか?
ありがとう!
n 候補のリストから n*(n-1)/2 候補ペアを生成する必要があります。
これは、すべてのマッパー インスタンスまたはすべてのレデューサー インスタンスで実行できます。
しかし、この操作が縮小フェーズで実行された場合、マップ フェーズで実行されたよりもはるかに高速であることに気付きました。理由は何ですか?
マッパーは重い計算をサポートできませんか?
Mapper インスタンスがネットワーク上でこのような計算を行うと、どのような影響がありますか?
ありがとう!
簡単に言えば、マッパーを使用してデータを生成する場合、Hadoop はマッパーから redcuer にデータをコピーする必要があり、これには時間がかかりすぎます。
生成された合計データは ですO(n^2)
。
マッパーを使用してペアを生成する場合n*(n-1)/2
、中間データをレデューサーにコピーする必要があります。Hadoop でのこのステップは、シャッフル フェーズと呼ばれます。レデューサーはこれらのデータを HDFS に配置する必要があります。シャッフル フェーズ中に原因でハード ディスクから読み書きされるデータの合計6* sizeof(intermediate data)
は、非常に大きくなる可能性があります。
一方、データがレデューサーによって生成された場合、O(n^2)
中間のデータ変換は不要です。そのため、パフォーマンスが向上する可能性があります。
したがって、パフォーマンスの問題は主に計算ではなくデータ変換によって引き起こされます。また、ディスクアクセスがない場合、マッパーとリデューサーのパフォーマンスは同じです。
それでもマッパーを使用してデータを生成したい場合はio.sort.factor
、圧縮をオンにするとパフォーマンスが向上する可能性があります。