我以以下格式生成了多个不同的密钥:
“71 1 2”、“69 2 3”、“68 5 6”等
但是,我发现这些对中的大多数都使用相同的减速器。
即使我实现了一个自定义分区器,我们使用的 getNumPartitioner 方法,hash_val % numReducers,也主要返回值,该值由少数几个加载它们的减速器组成,而其他减速器保持空闲。,据我了解,我们可以使用 WritableComparator 对keys进行排序但不能控制keys去不同的reducer。
有没有办法改善负载平衡?请帮忙。
我在下面附上一些代码以使我的解释清楚:
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
正如我们所见,不同的键倾向于映射到同一个 reducer。
请帮忙!谢谢!