Optimisation des performances avec la mise en cache sur Azure Databricks

Azure Databricks utilise la mise en cache de disque pour accélérer les lectures de données en créant des copies de fichiers de données Parquet distants dans le stockage local des nœuds à l’aide d’un format de données intermédiaire rapide. Les données sont mises en cache automatiquement chaque fois qu’un fichier doit être extrait à partir d’un emplacement distant. Les lectures successives des mêmes données sont ensuite effectuées localement, ce qui entraîne une amélioration significative de la vitesse de lecture. Le cache fonctionne pour tous les fichiers de données Parquet (y compris les tables Delta Lake).

Remarque

Dans des entrepôts SQL et Databricks Runtime 14.2 et versions ultérieures, la commande CACHE SELECT est ignorée. Un algorithme de mise en cache de disque amélioré est utilisé à la place.

Cache delta renommé en cache de disque

La mise en cache de disque sur Azure Databricks était anciennement appelée cache Delta et cache DBIO. Le comportement de mise en cache de disque est une fonctionnalité Azure Databricks propriétaire. Ce changement de nom cherche à résoudre la confusion comme quoi il faisait partie du protocole Delta Lake.

Cache de disque ou Cache Spark

Le cache de disque Azure Databricks diffère de la mise en cache Apache Spark. Azure Databricks recommande d’utiliser la mise en cache automatique des disques.

Le tableau suivant résume les principales différences entre la mise en cache de disque et la mise en cache Apache Spark afin de vous permettre de choisir le meilleur outil pour votre flux de travail :

Fonctionnalité Cache de disque Cache Apache Spark
Stocké sous Fichiers locaux sur un nœud Worker. Blocs en mémoire, en fonction néanmoins du niveau de stockage.
Appliqué(e) à Table Parquet stockée sur ABFS et d’autres systèmes de fichiers. N’importe quel DataFrame ou RDD.
Déclenchée Automatiquement, lors de la première lecture (si le cache est activé). Manuellement, avec modifications du code.
Évalué En différé. En différé.
Disponibilité Peut être activé ou désactivé avec les indicateurs de configuration, activés par défaut sur certains types de nœuds. Toujours disponible.
Supprimé Automatiquement en mode dernier récemment utilisé (LRU, Last Recently Used) ou en cas de modification de fichier, manuellement lors du redémarrage d’un cluster. Automatiquement en mode LRU, manuellement avec unpersist.

Cohérence du cache de disque

Le cache de disque détecte automatiquement lorsque des fichiers de données sont créés, supprimés, modifiés ou remplacés et met à jour son contenu en conséquence. Vous pouvez écrire, modifier et supprimer des données de table sans avoir besoin d’invalider explicitement les données mises en cache. Toutes les entrées obsolètes sont automatiquement invalidées et supprimées du cache.

Sélection des types d'instances pour utiliser la mise en cache disque

La méthode recommandée (et la plus simple) pour utiliser la mise en cache de disque consiste à choisir un type de Worker avec des volumes SSD lorsque vous configurez votre cluster. Ces Workers sont activés et configurés pour la mise en cache de disque.

Le cache de disque est configuré pour utiliser au maximum la moitié de l’espace disponible sur les disques SSD locaux fournis avec les nœuds Worker. Pour connaître les options de configuration, consultez Configuration du cache de disque.

Configurer le cache de disque

Azure Databricks vous recommande de choisir les types d’instances Worker accélérées par le cache pour vos clusters. Elles sont configurées automatiquement de façon optimale pour le cache de disque.

Notes

Lorsqu’un Worker est désactivé, le cache Spark stocké sur ce Worker est perdu. Par conséquent, si la mise à l’échelle automatique est activée, il y a une certaine instabilité avec le cache. Spark doit ensuite relire les partitions manquantes de la source si nécessaire.

Configuration de l’utilisation du disque

Pour configurer la façon dont le cache de disque utilise le stockage local des nœuds Worker, spécifiez les paramètres de configuration Spark suivants lors de la création du cluster :

  • spark.databricks.io.cache.maxDiskUsage : espace disque par nœud réservé aux données mises en cache en octets
  • spark.databricks.io.cache.maxMetaDataCache : espace disque par nœud réservé aux métadonnées mises en cache en octets
  • spark.databricks.io.cache.compression.enabled : indique si les données mises en cache doivent ou non être stockées dans un format compressé

Exemple de configuration :

spark.databricks.io.cache.maxDiskUsage 50g
spark.databricks.io.cache.maxMetaDataCache 1g
spark.databricks.io.cache.compression.enabled false

Activer et désactiver le cache de disque

Pour activer et désactiver le cache de disque, exécutez la commande suivante :

spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")

La désactivation du cache n’entraîne pas la suppression des données qui se trouvent déjà dans le stockage local. Cela empêche les requêtes d’ajouter de nouvelles données au cache et de lire les données qui s’y trouvent.