Ottimizzare le prestazioni con la memorizzazione nella cache in Azure Databricks
Azure Databricks usa la memorizzazione nella cache del disco per accelerare le letture dei dati creando copie di file di dati Parquet remoti nell'archiviazione locale dei nodi usando un formato di dati intermedio rapido. I dati vengono memorizzati automaticamente nella cache ogni volta che è necessario recuperare un file da una posizione remota. Le letture successive degli stessi dati vengono quindi eseguite localmente, con un miglioramento significativo della velocità di lettura. La cache funziona per tutti i file di 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 avanzato di memorizzazione nella cache dei dischi.
Cache Delta rinominata nella cache del 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 che faceva parte del protocollo Delta Lake.
Cache del disco e cache Spark
La cache dei dischi di Azure Databricks differisce dalla memorizzazione nella cache di Apache Spark. Azure Databricks consiglia di usare la memorizzazione automatica nella cache dei dischi.
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 apache Spark |
---|---|---|
Archiviato come | File locali in un nodo di lavoro. | I blocchi in memoria, ma dipendono 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). | Manualmente, richiede modifiche al codice. |
Valutato | Pigramente. | Pigramente. |
Disponibilità | Può essere abilitato o disabilitato con flag di configurazione, abilitati per impostazione predefinita in determinati tipi di nodo. | Sempre disponibile. |
Sfrattato | Automaticamente in modalità LRU o in qualsiasi 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 aggiornano 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 lavoro con volumi SSD quando si configura il cluster. Tali ruoli di lavoro 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
Azure Databricks consiglia di scegliere i tipi di istanza del ruolo di lavoro con accelerazione cache per il calcolo. Tali istanze vengono configurate automaticamente in modo ottimale per la cache del disco.
Nota
Quando un ruolo di lavoro viene rimosso, la cache Spark archiviata in tale ruolo di lavoro 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 il modo in cui la cache del disco usa l'archiviazione locale dei nodi di lavoro, specificare le impostazioni di configurazione spark seguenti durante la creazione del cluster:
spark.databricks.io.cache.maxDiskUsage
: spazio su disco per nodo riservato per i dati memorizzati nella cache in bytespark.databricks.io.cache.maxMetaDataCache
: spazio su disco per nodo riservato per i metadati memorizzati nella cache in bytespark.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 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.