Laissez-moi vous aider à clarifier le shuffle en profondeur et comment Spark utilise gestionnaires du brassage . Je signale des ressources très utiles :
https://trongkhoanguyenblog.wordpress.com/
https://0x0fff.com/spark-architecture-shuffle/
https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/4-shuffleDetails.md
En les lisant, j'ai compris qu'il existe différents gestionnaires de shuffle. Je veux me concentrer sur deux d'entre eux : hash manager
y sort manager
(qui est le gestionnaire par défaut).
Pour exposer ma question, je veux partir d'une transformation très courante :
val rdd = reduceByKey(_ + _)
Cette transformation provoque agrégation côté carte et ensuite remue-ménage pour rassembler toutes les mêmes clés dans une même partition.
Mes questions sont les suivantes :
-
L'agrégation Map-Side est-elle mise en œuvre en utilisant en interne une transformation mapPartition et en agrégeant ainsi toutes les mêmes clés à l'aide de la fonction combiner ou est-elle mise en œuvre avec une transformation mapPartition ?
AppendOnlyMap
oExternalAppendOnlyMap
? -
Si
AppendOnlyMap
oExternalAppendOnlyMap
Les cartes sont utilisées pour l'agrégation, sont-elles également utilisées pour l'agrégation de données ? réduire l'agrégation latérale qui se produit dans leResultTask
? -
Quel est le but exact de ces deux types de cartes (
AppendOnlyMap
oExternalAppendOnlyMap
)? -
Sont
AppendOnlyMap
oExternalAppendOnlyMap
utilisé par tous les gestionnaires de brassage ou seulement par le gestionnaire de tri ? -
J'ai lu qu'après
AppendOnlyMap
oExternalAppendOnlyMap
sont pleins, sont déversé dans un dossier comment cela se passe-t-il exactement ? -
En utilisant le gestionnaire de brassage Sort, nous utilisons un appendOnlyMap pour agréger et combiner les enregistrements de partition, n'est-ce pas ? Ensuite, lorsque la mémoire d'exécution est remplie, nous commençons à trier la carte, à la déverser sur le disque, puis à nettoyer la carte. Ma question est la suivante : quelle est la différence entre le déversement sur le disque et le shuffle write ? Ils consistent essentiellement à créer un fichier sur le système de fichiers local, mais ils sont traités différemment, les enregistrements de Shuffle write ne sont pas placés dans la carte appendOnlyMap.
-
Pouvez-vous expliquer en profondeur Que se passe-t-il lorsque reduceByKey est exécuté ? Expliquez-moi toutes les étapes à suivre pour y parvenir. Par exemple, toutes les étapes de l'agrégation côté carte, du brassage, etc.