Aller au contenu principal

Optimiser les performances avec la mise en cache sur Databricks

Databricks utilise la mise en cache sur disque pour accélérer la lecture des données en créant des copies des 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 automatiquement mises en cache chaque fois qu'un fichier doit être récupéré depuis un emplacement distant. Les lectures successives des mêmes données sont ensuite effectuées localement, ce qui entraîne une vitesse de lecture considérablement améliorée. Le cache fonctionne pour tous les fichiers de données Parquet (y compris les tables Delta Lake).

remarque

Dans les SQL Warehouse 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.

Le cache Delta renommé en cache sur disque

La mise en cache sur disque sur Databricks était auparavant appelée le cache Delta et le cache DBIO. Le comportement de mise en cache sur disque est une fonctionnalité propriétaire de Databricks. Ce changement de nom vise à résoudre la confusion selon laquelle il faisait partie du protocole Delta Lake.

Cache disque vs. cache Spark

Le cache de disque Databricks diffère de la mise en cache Apache Spark. Databricks recommande d'utiliser la mise en cache automatique du disque.

Le tableau suivant récapitule les principales différences entre la mise en cache sur disque et Apache Spark afin que vous puissiez choisir le meilleur outil pour votre workflow :

Fonctionnalité

Cache de disque

Cache Apache Spark

Stocké en tant que

Fichiers locaux sur un nœud worker.

Blocs en mémoire, mais cela dépend du niveau de stockage.

Appliqué à

Toute table Parquet stockée sur S3, ABFS et d'autres systèmes de fichiers.

Tout DataFrame ou RDD.

Déclenché

Automatiquement, lors de la première lecture (si le cache est activé).

Manuellement, nécessite des modifications de code.

Évalué

Lentement.

Lentement.

Disponibilité

Peut être activé ou désactivé à l'aide de drapeaux de configuration, activé par default sur certains types de nœuds.

Toujours disponible.

Expulsée

Automatiquement selon le principe du LRU ou en cas de modification de fichier, manuellement lors du redémarrage d’un cluster.

Automatiquement selon la méthode LRU, manuellement avec unpersist.

Fonctionnalité

Cache de disque

Cache Apache Spark

Stocké en tant que

Fichiers locaux sur un nœud worker.

Blocs en mémoire, mais cela dépend du niveau de stockage.

Appliqué à

Toute table Parquet stockée sur S3, ABFS et d'autres systèmes de fichiers.

Tout DataFrame ou RDD.

Déclenché

Automatiquement, lors de la première lecture (si le cache est activé).

Manuellement, nécessite des modifications de code.

Évalué

Lentement.

Lentement.

Disponibilité

Peut être activé ou désactivé à l'aide de drapeaux de configuration, activé par default sur certains types de nœuds.

Toujours disponible.

Expulsée

Automatiquement selon le principe du LRU ou en cas de modification de fichier, manuellement lors du redémarrage d’un cluster.

Automatiquement selon la méthode LRU, manuellement avec unpersist.

Cohérence du cache disque

Le cache de disque détecte automatiquement lorsque les fichiers de données sont créés, supprimés, modifiés ou écrasé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 en cache. Toute entrée obsolète est automatiquement invalidée et expulsée du cache.

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

Le moyen recommandé (et le plus simple) d'utiliser la mise en cache de disque est de choisir un type de Worker avec des volumes SSD lors de la configuration de votre cluster. Ces Workers sont activés et configurés pour la mise en cache sur disque.

Le cache disque est configuré pour utiliser au maximum la moitié de l'espace disponible sur les SSD locaux fournis avec les nœuds Worker. Pour les options de configuration, consultez Configurer le cache de disque.

Configurer le cache de disque

Databricks recommande de choisir des types d'instances worker à cache accéléré pour votre compute. De telles instances sont automatiquement configurées de manière optimale pour le cache disque.

remarque

Lorsqu'un Worker est mis hors service, le cache Spark stocké sur ce Worker est perdu. Ainsi, si la mise à l'échelle automatique est activée, il y a une certaine instabilité avec le cache. Spark devrait alors relire les partitions manquantes de la source, si nécessaire.

Configurer l'utilisation du disque

Pour configurer la manière 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 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: les données mises en cache doivent-elles être stockées au format compressé

Exemple de configuration :

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

Activer ou désactiver le cache de disque

Pour voir le paramètre actuel du cache de disque, exécutez la commande suivante :

Scala
spark.conf.get("spark.databricks.io.cache.enabled")

Pour activer et désactiver le cache disque, exécutez :

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

La désactivation du cache n'entraîne pas la suppression des données déjà présentes dans le stockage local. Au lieu de cela, cela empêche les requêtes d'ajouter de nouvelles données au cache et de lire des données depuis le cache.