Runtime di Apache Spark in Fabric

Microsoft Fabric Runtime è una piattaforma integrata in Azure basata su Apache Spark che consente l'esecuzione e la gestione di esperienze di data engineering e data science. Combina i componenti chiave di origini interne e open source, offrendo ai clienti una soluzione completa. Per semplicità, si fa riferimento a Microsoft Fabric Runtime basato su Apache Spark come runtime dell'infrastruttura.

Componenti principali di Fabric Runtime:

  • 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 l'ingegneria dei dati e le esperienze di data science.

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

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

  • Microsoft Fabric Runtime è basato su un sistema operativo open source affidabile, garantendo la compatibilità con varie configurazioni hardware e requisiti di sistema.

Di seguito è riportato un confronto completo dei componenti chiave, tra cui le versioni di Apache Spark, i sistemi operativi supportati, Java, Scala, Python, Delta Lake e R, sia per Runtime 1.1 che per Runtime 1.2 all'interno della piattaforma Microsoft Fabric.

Runtime 1.1 Runtime 1.2 Runtime 1.3
Apache Spark 3.3.1 3.4.1 3.5.0
Sistema operativo Ubuntu 18.04 Mariner 2.0 Mariner 2.0
Java 8 11 11
Scala 2.12.15 2.12.17 2.12.17
Python 3.10 3.10 3.10
Delta Lake 2.2.0 2.4.0 3.0.0
R 4.2.2 4.2.2 N/D

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

Ottimizzazioni dell'infrastruttura

In Microsoft Fabric, sia il motore Spark che le implementazioni delta Lake incorporano ottimizzazioni e funzionalità specifiche della piattaforma. Queste funzionalità sono progettate per l'uso di integrazioni native all'interno della piattaforma. È importante notare che tutte queste funzionalità possono essere disabilitate per ottenere funzionalità Spark e Delta Lake standard. I runtime di Infrastruttura per Apache Spark includono:

  • Versione open source completa di Apache Spark.
  • Raccolta di quasi 100 miglioramenti delle prestazioni delle query predefiniti. Questi miglioramenti includono funzionalità come la memorizzazione nella cache delle partizioni (abilitazione della cache delle partizioni FileSystem per ridurre le chiamate al metastore) e cross join alla proiezione della sottoquery scalare.
  • Cache intelligente incorporata.

All'interno del runtime di Infrastruttura per Apache Spark e Delta Lake sono disponibili funzionalità di scrittura native che servono due scopi chiave:

  1. Offrono prestazioni differenziate per la scrittura di carichi di lavoro, ottimizzando il processo di scrittura.
  2. Per impostazione predefinita, l'ottimizzazione dell'ordine virtuale dei file Delta Parquet. L'ottimizzazione di Delta Lake V-Order è fondamentale per offrire prestazioni di lettura superiori in tutti i motori di Infrastruttura. Per comprendere in modo più approfondito il funzionamento e come gestirlo, vedere l'articolo dedicato sull'ottimizzazione della tabella Delta Lake e sull'ordine V.

Supporto di più runtime

Fabric supporta più runtime, offrendo agli utenti la flessibilità di passare facilmente da una all'altra, riducendo al minimo il rischio di incompatibilità o interruzioni.

Per impostazione predefinita, tutte le nuove aree di lavoro usano la versione di runtime più recente, attualmente runtime 1.2.

Per modificare la versione di runtime a livello di area di lavoro, passare a Area di lavoro Impostazioni > Ingegneria dei dati/Science > Spark Compute > Workspace Level Default e selezionare il runtime desiderato dalle opzioni disponibili.

Dopo aver apportato questa modifica, tutti gli elementi creati dal sistema all'interno dell'area di lavoro, inclusi Lakehouses, SJD e Notebook, funzioneranno usando la versione di runtime a livello di area di lavoro appena selezionata a partire dalla sessione Spark successiva. Se attualmente si usa un notebook con una sessione esistente per un processo o qualsiasi attività correlata a lakehouse, la sessione spark continua così come è. Tuttavia, a partire dalla sessione o dal processo successivo, verrà applicata la versione di runtime selezionata.

Gif che mostra come modificare la versione di runtime.

Conseguenze delle modifiche di runtime in Spark Impostazioni

In generale, si intende eseguire la migrazione di tutte le impostazioni di Spark. Tuttavia, se si identifica che l'impostazione spark non è compatibile con il runtime B, viene generato un messaggio di avviso e non si impedisce l'implementazione dell'impostazione.

Modifica del runtime di Spark Impostazioni.

Conseguenze delle modifiche di runtime sulla gestione delle librerie

In generale, l'approccio consiste nel eseguire la migrazione di tutte le librerie dal runtime A al runtime B, inclusi runtime pubblici e personalizzati. Se le versioni di Python e R rimangono invariate, le librerie dovrebbero funzionare correttamente. Per i file JAR, tuttavia, esiste una probabilità significativa che non funzionino a causa di modifiche nelle dipendenze e altri fattori, ad esempio le modifiche in Scala, Java, Spark e il sistema operativo.

L'utente è responsabile dell'aggiornamento o della sostituzione di tutte le librerie che non funzionano con Runtime B. Se si verifica un conflitto, il che significa che Runtime B include una libreria originariamente definita in Runtime A, il sistema di gestione delle librerie tenterà di creare la dipendenza necessaria per Runtime B in base alle impostazioni dell'utente. Tuttavia, il processo di compilazione avrà esito negativo se si verifica un conflitto. Nel log degli errori gli utenti possono vedere quali librerie causano conflitti e apportare modifiche alle versioni o alle specifiche.

Modifica del runtime di gestione librerie.

Aggiornare il protocollo Delta Lake

Le funzionalità delta Lake sono sempre compatibili con le versioni precedenti, assicurando che le tabelle create in una versione delta Lake inferiore possano interagire senza problemi con le versioni successive. Tuttavia, quando alcune funzionalità sono abilitate( ad esempio, usando il delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) metodo , la compatibilità con versioni delta Lake inferiori potrebbe essere compromessa. In questi casi, è essenziale modificare i carichi di lavoro che fanno riferimento alle tabelle aggiornate per allinearsi a una versione delta Lake che mantiene la compatibilità.

Ogni tabella Delta è associata a una specifica del protocollo, definendo le funzionalità supportate. 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 è in grado di gestire una funzionalità elencata come supportata nel protocollo della tabella, non è possibile leggere o scrivere in tale tabella.

La specifica del protocollo è suddivisa in due componenti distinti: il protocollo di lettura e il protocollo di scrittura. Visitare la pagina "In che modo Delta Lake gestisce la compatibilità delle funzionalità?" per leggere i dettagli.

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

Gli utenti possono eseguire il comando delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) all'interno dell'ambiente PySpark e in Spark SQL e Scala. Questo comando consente di avviare un aggiornamento nella tabella Delta.

È essenziale notare che quando si esegue l'aggiornamento, gli utenti ricevono un avviso che indica che l'aggiornamento della versione del protocollo Delta è un processo non valido. Ciò significa che una volta eseguito l'aggiornamento, non può essere annullata.

Gli aggiornamenti delle versioni del protocollo possono influire potenzialmente sulla compatibilità dei lettori, dei writer o delle tabelle Delta Lake esistenti. Pertanto, è consigliabile procedere con cautela e aggiornare la versione del protocollo solo quando necessario, ad esempio quando si adottano nuove funzionalità in Delta Lake.

Screenshot che mostra l'avviso durante l'aggiornamento del protocollo delta lake.

Inoltre, gli utenti devono verificare che tutti i carichi di lavoro e i processi di produzione correnti e futuri siano compatibili con le tabelle Delta Lake usando la nuova versione del protocollo per garantire una transizione senza problemi e impedire potenziali interruzioni.

Modifiche a Delta 2.2 e Delta 2.4

Nella versione più recente di Fabric Runtime versione 1.2 il formato di tabella predefinito (spark.sql.sources.default) è ora delta. Nelle versioni precedenti di Fabric Runtime, versione 1.1 e in tutti i runtime di Synapse per Apache Spark contenenti Spark 3.3 o versioni successive, il formato di tabella predefinito è stato definito come parquet. Controllare la tabella con i dettagli di configurazione di Apache Spark per individuare le differenze tra Azure Synapse Analytics e Microsoft Fabric.

Tutte le tabelle create con Spark SQL, PySpark, Scala Spark e Spark R, ogni volta che il tipo di tabella viene omesso, creerà la tabella come delta per impostazione predefinita. Se gli script impostano in modo esplicito il formato di tabella, questo verrà rispettato. Il comando USING DELTA in Spark create table commands diventa ridondante.

Gli script che prevedono o presuppongono un formato di tabella parquet devono essere rivisti. I comandi seguenti non sono supportati nelle tabelle Delta:

  • ANALYZE TABLE $partitionedTableName PARTITION (p1) COMPUTE STATISTICS
  • ALTER TABLE $partitionedTableName ADD PARTITION (p1=3)
  • ALTER TABLE DROP PARTITION
  • ALTER TABLE RECOVER PARTITIONS
  • ALTER TABLE SET SERDEPROPERTIES
  • LOAD DATA
  • INSERT OVERWRITE DIRECTORY
  • SHOW CREATE TABLE
  • CREATE TABLE LIKE

Controllo delle versioni

La numerazione delle versioni di runtime, strettamente correlata al controllo delle versioni semantiche, segue un approccio leggermente diverso. La versione principale del runtime corrisponde alla versione principale di Apache Spark. Di conseguenza, Runtime 1 corrisponde a Spark versione 3. Analogamente, il runtime 2 imminente sarà allineato a Spark 4.0. È essenziale notare che tra i runtime correnti, Runtime 1.1 e Runtime 1.2, possono verificarsi modifiche, inclusa l'aggiunta o la rimozione di librerie diverse. Inoltre, la piattaforma offre una funzionalità di gestione delle librerie che consente agli utenti di installare le librerie desiderate.