Spark : étapes à forte E/S
Ensuite, examinez à nouveau les statistiques d’E/S de la plus longue étape :

Qu'est-ce que les E/S élevées ?
Quelle quantité de données doit y avoir dans une colonne d'E/S pour être considérée comme élevée ? Pour ce faire, start d'abord par le nombre le plus élevé dans l'une des colonnes données. Ensuite, tenez compte du nombre total de cœurs de processeur dont vous disposez sur l'ensemble de nos Worker. Généralement, chaque cœur peut lire et écrire environ 3 Mo par seconde.
Divisez votre colonne d'E/S la plus grande par le nombre de cœurs worker du cluster, puis divisez cela par les secondes de durée. Si le résultat est d'environ 3 Mo, alors vous êtes probablement lié aux E/S. Cela serait une E/S élevée.
Entrée élevée
Si vous voyez beaucoup d'entrées dans votre étape, cela signifie que vous passez beaucoup de temps à lire des données. Tout d'abord, identifiez les données que cette étape lit. Voir l'identification d'une lecture coûteuse dans le DAG de Spark.
Après avoir identifié les données spécifiques, voici quelques approches pour accélérer vos lectures :
- Use Delta.
- Utilisez le clustering liquide pour une meilleure suppression de données. Consultez Utiliser le clustering liquide pour les tables.
- Try Photon. Cela peut beaucoup aider avec la vitesse de lecture, surtout pour les tables larges.
- Rendez votre query plus sélective afin qu'elle n'ait pas besoin de lire autant de données.
- Reconsidérez le Layout de vos données afin que le saut de données soit plus efficace.
- Si vous lisez les mêmes données plusieurs fois, utilisez le cache Delta.
- Si vous effectuez une jointure, envisagez d'essayer de faire fonctionner DFP.
- Augmentez la taille de votre cluster ou utilisez le compute Serverless.
Sortie élevée
Si vous voyez beaucoup de sortie de votre étape, cela signifie que vous passez beaucoup de temps à écrire des données. Voici quelques approches pour résoudre ce problème :
-
Réécrivez-vous beaucoup de données ? Consultez Comment déterminer si Spark réécrit des données pour vérifier. Si vous réécrivez beaucoup de données :
- Vérifiez si vous avez une Merge qui doit être optimisée.
- Utilisez des vecteurs de suppression pour marquer les lignes existantes comme supprimées ou modifiées sans réécrire le fichier Parquet.
-
Activez Photon si ce n'est pas déjà fait. Photon peut grandement aider à améliorer la vitesse d'écriture.
-
Augmentez la taille de votre cluster ou utilisez le compute Serverless.
Brassage élevé
Databricks vous recommande de définir spark.sql.shuffle.partitions=auto pour laisser Spark choisir automatiquement le nombre de partitions de Shuffle optimales. Si vous n'êtes pas familier avec le shuffle, c'est le moment d'apprendre.
Pas d'E/S élevées
Si vous ne voyez pas un débit E/S élevé dans aucune des colonnes, alors vous devez approfondir les recherches. Voir Phase Spark lente avec peu d'E/S.