В искры apache -> Используя хэш-раздел-er, я считаю, что ключи с одинаковым значением хеширования будут продолжаться на одном и том же узле? что, если большинство ключей переходит к одному элементу-разделителю и как сбалансировать данные на нескольких рабочих узлах в таких сценариях. пожалуйста, помогите мнеКак сбалансировать нагрузку при использовании хэш-раздела-er?
1
A
ответ
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)
}
- для лучшего понимания взгляд на идеальный пример - spark-hashpartitioner-unexpected-partioning - answer по @ user6910411
Спасибо Ram, Это информативно. – nikhil08
Итак, вы хотите сказать, что нам нужно написать собственный пользовательский раздел-er, чтобы разделить ключи среди всех разделов, которые у нас есть? – nikhil08
Не нужно писать пользовательский partioner. Хэш код ключей должен быть равномерным. Для хэш-кода с несколькими ключами не должно быть одинаковым. –