0

キーとして次の文字列があります。以下のコーディングから、多くのレデューサーがありますが、すべてのキーが同じレデューサーに送られていることがわかります。結局、同じレデューサーが過負荷になります。各key(String)を異なるレデューサーに移動させたいです。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);

Output:

hash a: 1620857277 part_a: 7
hash b: 1621780797 part_b: 7
hash c: 1619933757 part_c: 7
4

1 に答える 1

1

1 つのオプションは、デフォルトの HashPartitioner を使用する代わりにカスタムパーティショナーを定義して、キーがリデューサー間で均等に分散されるようにすることです。

于 2012-07-19T20:30:53.693 に答える