Spark : étapes à forte E/S
Une étape peut être lente car elle traite plus de données que le cluster ne peut lire, écrire ou mélanger dans le temps disponible. Pour corriger une étape liée aux E/S :
- Réduisez la quantité de données traitées par l'étape.
- Accélérez la façon dont l’étape lit et écrit les données.
- Ajouter une capacité de compute.
Utilisez cette page après avoir écarté les biais et spill dans l'étape la plus longue. Les colonnes E/S de l'étape montrent si l'étape est limitée par les E/S et, si c'est le cas, si le goulot d'étranglement est l'entrée, la sortie ou le shuffle.
Examinez les colonnes d’E/S pour l’étape la plus longue :

Qu'est-ce que les E/S élevées ?
Chaque cœur de processeur peut lire et écrire environ 3 Mo par seconde. Pour vérifier si les E/S d'une étape sont élevées, comparez son throughput par cœur avec ce taux :
- Trouvez la valeur la plus élevée dans les colonnes E/S de l'étape.
- Divisez cette valeur par le nombre total de cœurs de processeur sur tous les Worker.
- Divisez le résultat par la durée de l'étape en secondes.
Si le résultat est d’environ 3 Mo par seconde, l’étape peut être liée aux E/S.
Entrée élevée
Si la colonne d'entrée est grande, l'étape passe beaucoup de temps à lire les données. Pour savoir quelle table ou quels fichiers l'étape lit, consultez Identifier une lecture coûteuse dans le DAG SQL. Ensuite, essayez ces approches pour accélérer les lectures :
- Stockez les données dans des tables Delta.
- Utilisez le clustering fluide pour améliorer l’ évitement des données.
- Activez Photon, ce qui peut accélérer les lectures, en particulier pour les tables larges.
- Rendez la query plus sélective afin qu'elle lise moins de données.
- Reconsidérez le data Layout des données pour que le saut de données soit plus efficace.
- Si l'étape lit plusieurs fois les mêmes données, utilisez le cache disque.
- Si l’étape exécute une jointure, vérifiez si l’ élagage dynamique des fichiers s’applique.
- Augmentez la taille du cluster ou utilisez le serverless compute.
Sortie élevée
Si la colonne de sortie est volumineuse, l’étape passe beaucoup de temps à écrire des données. Essayez les approches suivantes :
-
Réduire les réécritures. Pour vérifier si l’étape réécrit des données, consultez Déterminer si Spark réécrit trop de fichiers. Si l’étape réécrit beaucoup de données :
- Si l'écriture est une Merge, optimisez la Merge.
- Utilisez des vecteurs de suppression pour marquer les lignes existantes comme supprimées ou modifiées sans réécrire le fichier Parquet.
-
Activez Photon, qui peut accélérer les écritures.
-
Augmentez la taille du cluster ou utilisez le serverless compute.
Brassage élevé
Si la colonne Lecture aléatoire ou Écriture aléatoire est volumineuse, l'étape passe beaucoup de temps à mélanger les données entre les exécuteurs pour les jointures ou les agrégations. Pour réduire le temps de shuffle, Databricks recommande de régler spark.sql.shuffle.partitions sur auto afin que Spark définisse le nombre de partitions de shuffle en fonction du plan de query et de la taille des données d'entrée. Voir Configuration d'AQE.
Pas d'E/S élevées
Si aucune des colonnes E/S n'est grande, l'étape est lente pour une autre raison. Pour trouver la cause, voir Étape Spark lente avec peu d'E/S.