In apache spark -> En utilisant le partitionnement Hash-er, je crois que les clés avec la même valeur de hachage iront sur le même nœud? si la plupart des clés passent à la même partition-er et comment équilibrer les données sur plusieurs nœuds de travail dans de tels scénarios. S'il vous plaît, aidez-moicomment équilibrer la charge tout en utilisant la partition de hachage-er?
1
A
Répondre
1
Doc dit .. A Partitioner that implements hash-based partitioning using Java's Object.hashCode
Oui. tu as raison. Donc, si la distribution des clés n'est pas uniforme, vous pouvez vous retrouver dans des situations où une partie de votre cluster est inactive. See
Sa votre responsabilité de veiller à ce que les clés sont répartis uniformément. (Cela signifie hashcode ne doit pas être le même)
Pour cela, vous devez mieux comprendre HashPartitioner
et ce qu'il fait en interne.
Remarque: Le code de hachage de la clé sera simplement la clé elle-même. Le HashPartitioner
le modifiera avec le nombre total de partitions. i.e hashcode Mod avec totnumpartions.
Ci-dessous Util méthode de classe est utilisée à cette fin par HashPartitioner
def nonNegativeMod(x: Int, mod: Int): Int = {
val rawMod = x % mod
rawMod + (if (rawMod < 0) mod else 0)
}
- pour mieux voir la compréhension à l'exemple parfait - spark-hashpartitioner-unexpected-partioning - answer par @ user6910411
Merci Ram, Il est instructif. – nikhil08
Donc, vous voulez dire que nous devons écrire notre propre partition-er personnalisé pour diviser les clés entre toutes les partitions que nous avons? – nikhil08
Pas besoin d'écrire un partitionneur personnalisé. Le hashcode des clés devrait être uniforme. Pour les clés multiples, le code de hachage ne doit pas être identique. –