Je suis confus à propos de spill to disk
et shuffle write
. En utilisant le gestionnaire de tri par défaut, nous utilisons un appendOnlyMap
pour agréger et combiner les enregistrements de partition, non? Ensuite, lorsque la mémoire d'exécution se remplit, nous commençons à trier la carte, à la renverser sur le disque, puis à nettoyer la carte pour le prochain déversement (si cela se produit), mes questions sont les suivantes:
Quelle est la différence entre le déversement sur le disque et l'écriture aléatoire? Ils consistent essentiellement à créer des fichiers sur le système de fichiers local et aussi à enregistrer.
Les admissions sont différentes, donc les enregistrements de déversement sont triés car ils sont passés sur la carte, mais mélangent les enregistrements d'écriture non car ils ne passent pas de la carte.
Merci.
Giorgio
spill to disk
et shuffle write
sont deux choses différentes
spill to disk
- Déplacement des données de l'hôte RAM vers le disque hôte - est utilisé quand il n'y en a pas assez RAM sur votre machine , et il place une partie de son RAM sur le disque
http://spark.Apache.org/faq.html
Mes données doivent-elles tenir en mémoire pour utiliser Spark?
Non. Les opérateurs de Spark déversent des données sur le disque s'il ne tient pas en mémoire, ce qui lui permet de bien fonctionner sur toutes les données de taille. De même, les ensembles de données mis en cache qui ne tiennent pas en mémoire sont soit déversés sur le disque, soit recalculés à la volée lorsque cela est nécessaire, comme déterminé par le niveau de stockage du RDD.
shuffle write
- Les données se déplacent d'exécuteur (s) vers un autre exécuteur (s) - est utilisé lorsque les données doivent se déplacer entre les exécuteurs (par exemple en raison de JOIN, groupBy, etc.)
plus de données peuvent être trouvées ici:
Un exemple de cas Edge qui pourrait aider à résoudre ce problème:
En supposant que les données contiennent une clé, l'exécution de groupByKey réunira toutes les données dans une partition. Shuffle size
sera de 9 * 128 Mo (9 exécuteurs transfèreront leurs données dans le dernier exécuteur), et il n'y aura pas de spill to disk
car l'exécuteur dispose de 100 Go de RAM et seulement 1 Go de données
Concernant AppendOnlyMap :
Comme écrit dans le code
AppendOnlyMap
(voir ci-dessus) - cette fonction est une implémentation de bas niveau d'une simple table de hachage ouverte optimisée pour le cas d'utilisation de l'ajout uniquement, où les clés ne sont jamais supprimées, mais la valeur de chaque clé peut être modifié.
Le fait que deux modules différents utilisent la même fonction de bas niveau ne signifie pas que ces fonctions sont liées en haut niveau.