Ottimizzare le prestazioni con il caching su Azure Databricks

La lettura dei dati dall'archiviazione di oggetti nel cloud è più lenta rispetto alla lettura dal disco locale. Senza cache, query e notebook che leggono gli stessi file di dati Parquet li recuperano ripetutamente dall'archiviazione cloud di oggetti ogni volta.

Azure Databricks utilizza la cache su disco per velocizzare le letture dei dati. Quando un nodo recupera un file dati Parquet dall'archiviazione remota, memorizza automaticamente una copia sulla sua memoria locale in un formato intermedio veloce. Le letture successive degli stessi dati vengono eseguite localmente e sono significativamente più veloci. La cache funziona per tutti i file dati Parquet, incluse le tabelle Delta Lake.

Nota

In SQL Warehouse e Databricks Runtime 14.2 e versioni successive il CACHE SELECT comando viene ignorato. Viene invece usato un algoritmo migliorato di memorizzazione nella cache dei dischi.

Procedure consigliate

La cache del disco aiuta soprattutto con carichi di lavoro che leggono gli stessi dati molte volte, come query ripetute o iterative sulle stesse tabelle. Azure Databricks lo abilita automaticamente sui tipi di istanze worker che lo supportano. Per aiutare la cache del disco ad accelerare le letture, segui queste pratiche:

Cache Delta rinominata in cache su disco

La memorizzazione nella cache del disco in Azure Databricks è stata in precedenza definita cache Delta e cache DBIO. Il comportamento di memorizzazione nella cache del disco è una funzionalità proprietaria di Azure Databricks. Questa modifica del nome cerca di risolvere la confusione sul fatto che facesse parte del protocollo Delta Lake.

Confronta la cache del disco e quella di Spark

La cache dei dischi di Azure Databricks differisce dalla memorizzazione nella cache di Apache Spark. Databricks raccomanda di utilizzare la cache automatica su disco.

La tabella seguente riepiloga le differenze principali tra il disco e la memorizzazione nella cache di Apache Spark in modo da poter scegliere lo strumento migliore per il flusso di lavoro:

Funzionalità cache del disco cache di Apache Spark
Archiviato come File locali in un nodo di lavoro. I blocchi sono in memoria, ma dipende dal livello di archiviazione.
Applicato a Qualsiasi tabella Parquet archiviata in ABFS e in altri file system. Qualsiasi dataframe o RDD.
Attivato Automaticamente, alla prima lettura (se la cache è abilitata). Manuale: richiede modifiche al codice.
Valutato Pigramente. Pigramente.
Disponibilità Abilitato per impostazione predefinita su determinati tipi di nodo. Lo abiliti o disabiliti con i flag di configurazione. Sempre disponibile.
Sfrattato Automaticamente in modalità LRU o a ogni modifica del file, manualmente quando si riavvia un cluster. Automaticamente in modalità LRU, manualmente con unpersist.

Coerenza della cache del disco

La cache del disco rileva automaticamente quando i file di dati vengono creati, eliminati, modificati o sovrascritti e ne aggiorna il contenuto di conseguenza. È possibile scrivere, modificare ed eliminare dati di tabella senza che sia necessario invalidare in modo esplicito i dati memorizzati nella cache. Tutte le voci non aggiornate vengono invalidate automaticamente e rimosse dalla cache.

Selezione dei tipi di istanza per l'uso della memorizzazione nella cache del disco

Il modo consigliato (e più semplice) per usare la memorizzazione nella cache del disco consiste nel scegliere un tipo di worker con volumi SSD quando si configura il cluster. Tali worker sono abilitati e configurati per la memorizzazione nella cache del disco.

La cache del disco è configurata per l'uso al massimo della metà dello spazio disponibile nelle unità SSD locali fornite con i nodi di lavoro. Per le opzioni di configurazione, vedere Configurare la cache del disco.

Configurare la cache del disco

Databricks consiglia di scegliere tipi di istanze worker con cache accelerata per il tuo ambiente di calcolo. Tali istanze vengono configurate automaticamente in modo ottimale per la cache del disco.

Nota

Quando un worker viene dismesso, la cache Spark archiviata in tale worker viene persa. Pertanto, se la scalabilità automatica è abilitata, c'è qualche instabilità con la cache. Spark dovrà quindi rileggere le partizioni mancanti dall'origine in base alle esigenze.

Configurare l'utilizzo del disco

Per configurare come la cache del disco utilizza lo storage locale dei nodi di lavoro, specifica queste impostazioni di configurazione di Spark durante la creazione del cluster:

  • spark.databricks.io.cache.maxDiskUsage: spazio su disco per nodo riservato per i dati memorizzati nella cache in byte
  • spark.databricks.io.cache.maxMetaDataCache: spazio su disco per nodo riservato per i metadati memorizzati nella cache in byte
  • spark.databricks.io.cache.compression.enabled: i dati memorizzati nella cache devono essere archiviati in formato compresso

Configurazione di esempio:

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

Abilitare o disabilitare la cache del disco

Per vedere l'impostazione attuale della cache disco, esegui:

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

Per abilitare e disabilitare la cache del disco, eseguire:

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

La disabilitazione della cache non comporta l'eliminazione dei dati già presenti nell'archiviazione locale. Impedisce invece alle query di aggiungere nuovi dati alla cache e di leggere i dati dalla cache.