Hadoop パーティショナーについてお聞きしたいのですが、マッパー内に実装されていますか? デフォルトのハッシュ パーティショナーを使用してパフォーマンスを測定する方法 - データ スキューを減らすためのより良いパーティショナーはありますか?
ありがとう
Hadoop パーティショナーについてお聞きしたいのですが、マッパー内に実装されていますか? デフォルトのハッシュ パーティショナーを使用してパフォーマンスを測定する方法 - データ スキューを減らすためのより良いパーティショナーはありますか?
ありがとう
パーティショナーはマッパー内にありません。
以下は、各マッパーで発生するプロセスです -
以下は、各Reducerで発生するプロセスです
各リデューサーは各マッパーからすべてのファイルを収集し、並べ替え/マージ フェーズ (並べ替えはマッパー側で既に行われています) に移行し、並べ替え順序を維持しながらすべてのマップ出力をマージします。
reduce フェーズでは、ソートされた出力のキーごとに reduce 関数が呼び出されます。
以下は、キーの分割の実際のプロセスを示すコードです。getpartition() は、ハッシュ コードに基づいて、特定のキーを送信する必要があるパーティション番号/リデューサーを返します。ハッシュコードはキーごとに一意である必要があり、ランドスケープ全体でハッシュコードは一意であり、キーに対して同じである必要があります。この目的のために、hadoop は、Java のデフォルトのハッシュ コードを使用する代わりに、そのキーに独自のハッシュコードを実装します。
Partition keys by their hashCode().
public class HashPartitioner<K, V> extends Partitioner<K, V> {
public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}