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).
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 |
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.
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 octetsspark.databricks.io.cache.maxMetaDataCache: espace disque par nœud réservé aux métadonnées mises en cache en octetsspark.databricks.io.cache.compression.enabled: les données mises en cache doivent-elles être stockées au 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 ou désactiver le cache de disque
Pour voir le paramètre actuel du cache de disque, exécutez la commande suivante :
spark.conf.get("spark.databricks.io.cache.enabled")
Pour activer et désactiver le cache disque, exécutez :
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.