次の形式で複数の異なるキーが生成されています。
「7112」、「69 2 3」、「6856」など。
しかし、私はこれらのペアのほとんどが同じレデューサーに行くことがわかりました。
カスタムパーティショナーを実装した場合でも、hash_val%numReducersを使用するgetNumPartitionerメソッドは、ほとんどの場合、値を返します。この値は、ロードする少数のレデューサーにグループ化されますが、他のレデューサーは空のままです。、私の理解によれば、WritableComparatorを使用してキーを並べ替えることはできますが、キーを制御して別のレデューサーに移動することはできません。
負荷分散を改善する方法はありますか?plsは役立ちます。
説明を明確にするために、以下にいくつかのコードを添付しています。
String a = "71 1 2";
String b = "72 1 1";
String c = "70 1 3";
int hash_a = a.hashCode();
int hash_b = b.hashCode();
int hash_c = c.hashCode();
int part_a = hash_a % 10;
int part_b = hash_b % 10;
int part_c = hash_c % 10;
System.out.println("hash a: "+hash_a+" part_a: "+part_a);
System.out.println("hash b: "+hash_b+" part_b: "+part_b);
System.out.println("hash c: "+hash_c+" part_c: "+part_c);
出力:
ハッシュa:1620857277 part_a:7ハッシュb:1621780797 part_b:7ハッシュc:1619933757 part_c:7
ご覧のとおり、異なるキーは同じレデューサーにマップされる傾向があります。
助けてください!ありがとう!