Durate di esecuzione di Apache Spark in Fabric

Fabric Runtime è una piattaforma integrata Azure basata su Apache Spark che consente l'esecuzione e la gestione di esperienze di data engineering e data science. Combina componenti chiave di origini interne e open source, offrendo ai clienti una soluzione completa. Per semplicità, si riferisca a Fabric Runtime alimentato da Apache Spark come Fabric Runtime.

Principali componenti del runtime di Fabric:

  • Apache Spark: una potente libreria di elaborazione distribuita open source che consente attività di elaborazione e analisi dei dati su larga scala. Apache Spark offre una piattaforma versatile e ad alte prestazioni per esperienze di ingegneria dei dati e data science.

  • Delta Lake è un livello di archiviazione open source che porta transazioni ACID e altre funzionalità di affidabilità dei dati in Apache Spark. Integrato all'interno del runtime di Fabric, Delta Lake migliora le funzionalità di elaborazione dei dati e garantisce la coerenza dei dati tra più operazioni simultanee.

  • Il Native Execution Engine - un miglioramento trasformativo per i carichi di lavoro di Apache Spark, che offre significativi miglioramenti di prestazioni eseguendo direttamente query Spark sull'infrastruttura lakehouse. Integrato senza soluzione di continuità, non richiede modifiche al codice ed evita il lock-in del fornitore. Supporta sia i formati Parquet che Delta nelle API Apache Spark in Runtime 1.3 (Spark 3.5) e Runtime 2.0 (Spark 4.1).

    Gli operatori supportati vengono trasferiti da Spark basato su JVM a un percorso di esecuzione C++ ottimizzato per l'esecuzione vettoriale tramite Apache Gluten e Velox, fornendo l'elaborazione in formato colonnare con accelerazione SIMD e supporto nativo per i formati Parquet e Delta. Quando un operatore non è supportato, l'esecuzione cade automaticamente su Spark basato su JVM. Nei benchmark rappresentativi (TPC-DS a fattore di scala 1000 con Delta), il motore ha ottenuto fino a sei volte più veloci prestazioni rispetto a Spark open source, traducendo in circa 83% risparmio sui costi di calcolo in un cluster fabric a dimensione fissa.

    Il percorso nativo conserva le ottimizzazioni delle Query Spark di Fabric, tra cui l'esecuzione di query adattive, le riscritture basate sui costi, la potatura delle colonne e il pushdown dei predicati. Puoi attivare l'esecuzione nativa per applicazione usando la spark.native.enabled configurazione. Durante l'esecuzione di una cella del notebook, Fabric Spark Advisor visualizza avvisi in tempo reale quando l'esecuzione torna a utilizzare Spark basato su JVM, agevolando la diagnosi quando l'offload nativo non viene applicato.

  • Pacchetti a livello predefinito per i pacchetti Java/Scala, Python e R che supportano diversi ambienti e linguaggi di programmazione. Questi pacchetti vengono installati e configurati automaticamente, in modo che gli sviluppatori possano applicare i propri linguaggi di programmazione preferiti per le attività di elaborazione dati.

  • Il Fabric Runtime è costruito su un robusto sistema operativo open-source, garantendo compatibilità con varie configurazioni hardware e requisiti di sistema.

Nella tabella seguente trovi un confronto completo dei componenti chiave, incluse le versioni di Apache Spark, i sistemi operativi supportati, Java, Scala, Python, Delta Lake e R, per i runtime basati su Apache Spark all'interno della piattaforma Fabric.

Suggerimento

Usa sempre la versione runtime più recente e generalmente disponibile (GA) per il tuo carico di lavoro in produzione, che attualmente è Runtime 2.0.

Componente Runtime 1.3 Runtime 2.0
fase di rilascio GA GA
Versione di Apache Spark 3.5.5 4.1
Sistema operativo Mariner 2.0 Mariner 3.0
Versione Java 11 21
Versione scala 2.12.17 2.13.16
Versione di Python 3.11 3.13
Versione di Delta Lake 3.2 4.2

Visitare Runtime 1.3 o Runtime 2.0 per esplorare dettagli, nuove funzionalità, miglioramenti e scenari di migrazione per la versione di runtime specifica.

Ottimizzazioni di Fabric

In Fabric, sia il motore Spark che le implementazioni di Delta Lake incorporano ottimizzazioni e funzionalità specifiche per piattaforma. Queste funzionalità utilizzano integrazioni native all'interno della piattaforma. Puoi disabilitare tutte queste funzionalità per ottenere la funzionalità standard di Spark e Delta Lake. I runtime di Fabric per Apache Spark includono:

  • La versione open source completa di Apache Spark.
  • Una raccolta di quasi 100 miglioramenti distinti delle prestazioni delle query integrati. Questi miglioramenti includono funzionalità come la memorizzazione nella cache delle partizioni (che abilita la cache delle partizioni del FileSystem per ridurre le chiamate al metastore) e il Cross Join con proiezione di sottoquery scalare.
  • Cache intelligente incorporata.

All'interno del Fabric Runtime per Apache Spark e Delta Lake, le capacità degli scrittori nativi svolgono due scopi chiave:

  • Offrono prestazioni differenziate per la scrittura di carichi di lavoro, ottimizzando il processo di scrittura.
  • Di default utilizzano l'ottimizzazione in ordine V dei file Delta Parquet. L'ottimizzazione dell'ordine V di Delta Lake è fondamentale per garantire prestazioni di lettura superiori su tutti i motori Fabric. Per comprendere più a fondo come funziona e come gestirlo, vedi ottimizzazione delle tabelle Delta Lake e V-order.

Supporto di più runtime

Fabric supporta più runtime, così puoi passare da uno all'altro e ridurre il rischio di problemi di compatibilità o interruzioni.

Note

Un runtime di Spark include una specifica versione Python come parte del suo set di componenti. Ad esempio, Runtime 1.3 include Python 3.11. Questa versione Python è separata dal kernel del notebook Python che si seleziona per i notebook Python puri. Per il ciclo di vita del kernel del notebook Python, vedi runtime e ciclo di vita del kernel del notebook Python in Fabric.

Di default, tutti i nuovi workspace attualmente utilizzano Runtime 1.3.

Per modificare la versione di runtime a livello di area di lavoro, vai a Impostazioni area di lavoro>Ingegneria/Scienza dei dati>Impostazioni Spark. Nella scheda Ambiente, selezionare la versione di runtime desiderata dalle opzioni disponibili. Selezionare Salva per confermare la selezione.

Screenshot che mostra dove selezionare la versione runtime per le impostazioni dello spazio di lavoro.

Dopo aver apportato questa modifica, tutti gli elementi creati dal sistema all'interno dell'area di lavoro, inclusi lakehouse, descrizioni dei processi Spark e notebook, utilizzeranno la versione del runtime appena selezionata a livello di area di lavoro a partire dalla sessione Spark successiva. Se attualmente stai usando un quaderno con una sessione esistente per un lavoro o qualsiasi attività legata al lago, quella sessione Spark continua così com'è. Tuttavia, a partire dalla sessione o dal lavoro successivo, si applica la versione runtime selezionata.

Per modificare il runtime a livello Environment di oggetto, crea un nuovo oggetto Ambiente o apri uno esistente. Nel menu a tendina Runtime , seleziona la versione di runtime desiderata tra le opzioni disponibili, seleziona Save, e poi Publish le tue modifiche. A questo punto, è possibile usare questo Environment elemento con Notebook o Spark Job Definition.

Screenshot che mostra dove selezionare la versione di runtime per l'elemento Environment.

Conseguenze delle modifiche del runtime nelle impostazioni di Spark

Il sistema migra tutte le impostazioni di Spark. Tuttavia, se il sistema identifica che un'impostazione di Spark non è compatibile con Runtime B, mostra un messaggio di avviso e non implementa l'impostazione.

Modifica delle impostazioni runtime di SPARK.

Conseguenze delle modifiche del runtime sulla gestione delle librerie

Il sistema di gestione delle librerie migra tutte le librerie dal runtime A al runtime B, inclusi sia i runtime pubblici che quelli personalizzati. Se le versioni Python e R rimangono le stesse, le librerie funzionano correttamente. Tuttavia, per i JAR, c'è una grande probabilità che non funzionino a causa di cambiamenti nelle dipendenze e altri fattori come modifiche a Scala, Java, Spark e nel sistema operativo.

Sei responsabile di aggiornare o sostituire qualsiasi libreria che non funzioni con Runtime B. Se c'è un conflitto, il che significa che Runtime B include una libreria originariamente definita in Runtime A, il sistema di gestione delle librerie cerca di creare la dipendenza necessaria per Runtime B in base alle tue impostazioni. Tuttavia, il processo di compilazione fallisce se si verifica un conflitto. Nel registro errori, puoi vedere quali librerie causano conflitti e apportare modifiche alle loro versioni o specifiche.

Modifica del runtime di gestione delle librerie.

Aggiornare il protocollo Delta Lake

Le funzionalità di Delta Lake sono sempre retrocompatibili, garantendo che le tabelle create in una versione inferiore di Delta Lake possano interagire senza soluzione di continuità con versioni superiori. Tuttavia, quando abiliti alcune funzionalità (ad esempio, usando il delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) metodo), potresti compromettere la compatibilità in avanti con le versioni inferiori di Delta Lake. In tali casi, è necessario modificare i carichi di lavoro che fanno riferimento alle tabelle aggiornate per allinearsi a una versione Delta Lake che mantenga la compatibilità.

Ogni tabella Delta è associata a una specifica di protocollo, che definisce le caratteristiche che supporta. Le applicazioni che interagiscono con la tabella, per la lettura o la scrittura, si basano su questa specifica del protocollo per determinare se sono compatibili con il set di funzionalità della tabella. Se un'applicazione non ha la capacità di gestire una caratteristica indicata come supportata dal protocollo della tabella, non può leggere o scrivere su quella tabella.

La specifica del protocollo è suddivisa in due componenti distinti: il protocollo "read" e il protocollo "write". Per maggiori informazioni, vedi Come gestisce Delta Lake la compatibilità delle funzionalità?

GIF che mostra l'avviso immediato quando viene usato il metodo upgradeTableProtocol.

Puoi eseguire il comando delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) nell'ambiente PySpark, e in Spark SQL e Scala. Questo comando avvia un aggiornamento sulla tabella Delta.

Quando esegui questo aggiornamento, ricevi un avviso che l'aggiornamento della versione del protocollo Delta è un processo irreversibile. Questo processo significa che, una volta eseguito l'aggiornamento, non puoi più annullarlo.

Gli aggiornamenti delle versioni del protocollo possono influire potenzialmente sulla compatibilità di lettori, writer o entrambi i lettori di tabelle Delta Lake esistenti. Pertanto, procedere con cautela e aggiornare la versione del protocollo solo quando necessario, ad esempio durante l'adozione di nuove funzionalità in Delta Lake.

Importante

Per saperne di più su quali versioni e funzionalità di protocollo sono compatibili in tutte le esperienze Fabric, vedi Interoperabilità del formato tabella Delta Lake.

Screenshot che mostra l'avviso durante l'aggiornamento del protocollo Delta Lake.

Inoltre, verifica che tutti i carichi di lavoro e processi di produzione attuali e futuri siano compatibili con le tabelle Delta Lake utilizzando la nuova versione del protocollo per garantire una transizione senza soluzione di continuità e prevenire eventuali interruzioni.