2017-01-25 8 views
1

В искры apache -> Используя хэш-раздел-er, я считаю, что ключи с одинаковым значением хеширования будут продолжаться на одном и том же узле? что, если большинство ключей переходит к одному элементу-разделителю и как сбалансировать данные на нескольких рабочих узлах в таких сценариях. пожалуйста, помогите мнеКак сбалансировать нагрузку при использовании хэш-раздела-er?

ответ

1

Док говорит .. A Partitioner that implements hash-based partitioning using Java's Object.hashCode

Да. Ты прав. Поэтому, если распределение ключей не является однородным, вы можете оказаться в ситуации, когда часть вашего кластера простаивает. See

Его ваша ответственность, чтобы убедиться, что ключи равномерно распределены по всем. (Это означает, что хэш-код не должен быть таким же)

Для этого вам необходимо более глубокое понимание HashPartitioner и что она делает внутренне.

Примечание: Хэш-код ключа будет только самой клавишей. HashPartitioner изменяет его на количество полных разделов. i.e hashcode Mod с totnumpartions.

Ниже Util метод класса используется для этой цели HashPartitioner

def nonNegativeMod(x: Int, mod: Int): Int = { 
    val rawMod = x % mod 
    rawMod + (if (rawMod < 0) mod else 0) 
} 
+0

Спасибо Ram, Это информативно. – nikhil08

+0

Итак, вы хотите сказать, что нам нужно написать собственный пользовательский раздел-er, чтобы разделить ключи среди всех разделов, которые у нас есть? – nikhil08

+0

Не нужно писать пользовательский partioner. Хэш код ключей должен быть равномерным. Для хэш-кода с несколькими ключами не должно быть одинаковым. –