Aller au contenu principal

Optimiser les performances avec la mise en cache sur Databricks

La lecture de données à partir du stockage d'objets cloud est plus lente que la lecture à partir du disque local. Sans mise en cache, les requêtes et les notebooks qui lisent à plusieurs reprises les mêmes fichiers de données Parquet les récupèrent à chaque fois depuis le stockage d'objets cloud.

Databricks utilise la mise en cache sur disque pour accélérer la lecture des données. Lorsqu'un nœud récupère un fichier de données Parquet à partir du stockage distant, il en stocke automatiquement une copie sur son stockage local au format intermédiaire rapide. Les lectures ultérieures des mêmes données s'exécutent localement et sont beaucoup plus rapides. 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.

Bonnes pratiques​

Le cache disque aide principalement les charges de travail qui lisent les mêmes données plusieurs fois, telles que des queries répétées ou itératives sur les mêmes tables. Databricks l'active automatiquement sur les types d'instance worker qui la prennent en charge. Pour aider le cache de disque à accélérer les lectures, appliquez les pratiques suivantes :

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.

Comparaison du cache disque et du 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 GCS 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é

Activé par default sur certains types de nœuds. Vous l’activez ou le désactivez à l’aide d’indicateurs de configuration.

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 GCS 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é

Activé par default sur certains types de nœuds. Vous l’activez ou le désactivez à l’aide d’indicateurs de configuration.

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.

Sur le compute serverless, df.cache() fonctionne différemment du cache Apache Spark dans cette table. Voir Mettre en cache des DataFrames sur le compute serverless.

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​

La mise en cache sur disque fonctionne par default avec tous les types d'instances dotées de SSD locaux.

Sur les types d’instance qui prennent en charge la mise en cache sur disque, Databricks active automatiquement la mise en cache sur disque sur ce cluster et configure des tailles de cache appropriées pour ce type d’instance.

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​

L'utilisation du disque de cache est automatiquement définie sur les types d'instances avec des SSD locaux. Databricks recommande de ne pas définir explicitement l'utilisation du disque cache.

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 façon dont le cache disque utilise le stockage local des nœuds worker, spécifiez ces paramètres de configuration Spark 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​

La mise en cache sur disque fonctionne par default avec tous les types d'instances dotées de SSD locaux.

Pour voir le paramètre actuel du cache disque, exécutez :

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.