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.
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 :
- Choisissez un type d'instance Worker qui prend en charge la mise en cache du disque. Voir Sélection des types d'instances pour utiliser la mise en cache du disque.
- Utilisez le cache disque au lieu du cache Apache Spark pour les lectures répétées de données Parquet et Delta Lake. Voir Comparer le cache disque et le cache Spark.
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 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é | 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 |
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 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 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 disque, exécutez :
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.