Condividi tramite


Cache intelligente in Microsoft Fabric

La funzionalità di cache intelligente funziona perfettamente in background e memorizza nella cache i dati per velocizzare l'esecuzione di processi Apache Spark in Microsoft Fabric durante la lettura dall'archiviazione di OneLake o Azure Data Lake Archiviazione (ADLS) Gen2 tramite collegamenti. Rileva anche automaticamente le modifiche ai file sottostanti e aggiorna automaticamente i file nella cache, fornendo i dati più recenti. Quando le dimensioni della cache raggiungono il limite, la cache rilascia automaticamente i dati meno letti per liberare spazio per i dati più recenti. Questa funzionalità riduce il costo totale di proprietà migliorando le prestazioni fino al 60% nelle letture successive dei file archiviati nella cache disponibile.

Quando il motore Apache Spark in Microsoft Fabric esegue una query su un file o una tabella dal lakehouse, effettua una chiamata all'archiviazione remota per leggere i file sottostanti. Con ogni richiesta di query per leggere gli stessi dati, il motore Spark deve effettuare una chiamata all'archiviazione remota ogni volta. Questo processo ridondante aggiunge latenza al tempo di elaborazione totale. Spark ha un requisito di memorizzazione nella cache che è necessario impostare e rilasciare manualmente la cache per ridurre al minimo la latenza e migliorare le prestazioni complessive. Tuttavia, questo requisito può comportare dati non aggiornati se i dati sottostanti cambiano.

La cache intelligente semplifica il processo memorizzando automaticamente nella cache ogni lettura all'interno dello spazio di archiviazione della cache allocato in ogni nodo Spark in cui i file di dati vengono memorizzati nella cache in UNITÀ SSD. Ogni richiesta di un file verifica se il file esiste nella cache dei nodi locale e confronta il tag dalla risorsa di archiviazione remota per determinare se il file non è aggiornato. Se il file non esiste o se il file non è aggiornato, Spark legge il file e lo archivia nella cache. Quando la cache diventa piena, il file con l'ultima volta di accesso meno recente viene rimosso dalla cache per consentire file più recenti.

La cache intelligente è una singola cache per nodo. Se si usa un nodo di medie dimensioni ed eseguito con due executor di piccole dimensioni in quel singolo nodo, i due executor condividono la stessa cache. Inoltre, questa memorizzazione nella cache a livello di file di dati consente a più query di usare la stessa cache se accedono agli stessi file di dati o dati.

Funzionamento

In Microsoft Fabric (Runtime 1.1 e 1.2) la memorizzazione nella cache intelligente è abilitata per impostazione predefinita per tutti i pool di Spark per tutte le aree di lavoro con dimensioni della cache con il 50%. Le dimensioni effettive dell'archiviazione disponibile e della dimensione della cache in ogni nodo dipendono dalla famiglia di nodi e dalle dimensioni del nodo.

Quando usare la cache intelligente

Questa funzionalità offre vantaggi se:

  • Il carico di lavoro richiede la lettura dello stesso file più volte e le dimensioni del file si adattano alla cache.

  • Il carico di lavoro usa formati di file Delta Lake, Parquet o CSV.

Se non viene visualizzato il vantaggio della cache intelligente, vedere:

  • Si sta leggendo un file che supera le dimensioni della cache. In tal caso, l'inizio dei file potrebbe essere rimosso e le query successive devono recuperare i dati dalla risorsa di archiviazione remota. In questo caso, non si noterà alcun vantaggio dalla cache intelligente e potrebbe essere necessario aumentare le dimensioni della cache e/o le dimensioni del nodo.

  • Il carico di lavoro richiede grandi quantità di shuffle. La disabilitazione della cache intelligente libera spazio disponibile per evitare che il processo non riesca a causa di spazio di archiviazione insufficiente.

Abilitare e disabilitare la cache intelligente

È possibile disabilitare o abilitare la cache intelligente all'interno di una sessione eseguendo il codice seguente nel notebook o impostando questa configurazione a livello di area di lavoro o di elemento ambiente .

spark.conf.set("spark.synapse.vegas.useCache", "false/true")