다음과 같은 문자열을 키로 사용합니다. 아래의 코딩에서 많은 감속기가 있지만 모든 키가 같은 감속기로 이동하는 것을 볼 수 있습니다. 결국 동일한 감속기가 과부하됩니다. 나는 각각의 열쇠 (String)가 다른 감속기에 가기를 원한다. Pls이 문제를 도와주세요. 감사!hadoop의로드 밸런싱 개선
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
새로운 텍스트 ("71 1 2"). hashCode()'를 사용하면 더 나은 결과를 얻을 수 있습니다. (IDE를 실행하고 확인하는 게 너무 미안합니다.) 'Text.hashCode()'는 WritableComparator.hashBytes (byte []) 메쏘드를 사용하고 더 좋은 대답을 줄 수 있습니다. –
WritableComparator와 String hashCode 메쏘드가 비슷하다는 것을 마지막으로 무시하십시오. –
안녕하세요 Chris! 답장을 보내 주셔서 감사합니다. 필자는 필적할만한 것이라면 정렬을 위해 사용할 수 있다고 생각하지만 여전히 똑같은 수준으로 감소한다고 생각합니다. 나 맞아? 말하자면, "71 1 2"를 정렬 한 다음 "71 1 3"이옵니다. 그러나 분할자가 리턴 한 파티션 num이 동일한 경우 (modulus 사용), 여전히 동일한 감속기에 도달합니다. 나 맞아? 그렇다면 어떻게 문제를 해결할 수 있습니까? –