Adattare il codice Apache Spark predefinito per Azure Databricks

Questo articolo illustra le modifiche necessarie per adattare i carichi di lavoro apache Spark esistenti da eseguire in Azure Databricks. Sia che si passi a Azure Databricks da un cluster locale, da un'infrastruttura personalizzata basata sul cloud o da un'altra offerta Apache Spark aziendale, la maggior parte dei carichi di lavoro richiede solo alcune modifiche per accedere all'ambiente di produzione. Azure Databricks estende, semplifica e migliora le prestazioni di Apache Spark introducendo ottimizzazioni personalizzate, configurando e distribuendo l'infrastruttura e mantenendo le dipendenze in Databricks Runtime.

Importante

Quando si aggiornano le versioni di Apache Spark, potrebbero verificarsi interruzioni nella sintassi. Consulta le versioni delle note di rilascio e la compatibilità di Databricks Runtime e la guida alla migrazione di Spark.

Cambia parquet in delta

Databricks consiglia di usare Delta Lake anziché Parquet o ORC durante la scrittura di dati. Azure Databricks ha ottimizzato molte funzionalità per l'efficienza durante l'interazione con le tabelle supportate da Delta Lake e l'aggiornamento dei dati e del formato di codice Parquet a Delta Lake richiede solo alcuni passaggi. Vedere Eseguire la migrazione di un data lake Parquet a Delta Lake.

Poiché Delta Lake offre garanzie ACID di transazione, potrebbe essere possibile semplificare i carichi di lavoro per rimuovere soluzioni alternative mirate alla creazione di pseudo-transazionalità nelle operazioni Apache Spark. Alcuni esempi:

  • Creazione di una struttura di directory o strategia di partizionamento che consente di individuare simultaneamente tutti i file di una determinata operazione come parte di una partizione.
  • Configurare o fare affidamento sul metastore per aggiungere la transazionalità nel rilevamento dei nuovi dati.
  • Uso di MSCK repair per registrare i file scritti in una tabella nel metastore.
  • Uso di alter table add partition per aggiungere manualmente partizioni a una tabella.

Consulta Quando partizionare le tabelle su Azure Databricks.

Nota

È possibile eseguire carichi di lavoro senza aggiornare i formati di dati usati, ma molti dei migliori miglioramenti delle prestazioni in Azure Databricks sono legati direttamente a Delta Lake.

Ricompilare il codice Apache Spark con le librerie compatibili con Databricks Runtime

Ogni versione di Databricks Runtime è preconfigurato con molte delle librerie necessarie nelle applicazioni Apache Spark. È possibile installare librerie aggiuntive nel calcolo in base alle esigenze, ma quando possibile, Databricks consiglia di usare le versioni della libreria incluse nel runtime di Databricks che vengono testate per la compatibilità. Ogni versione di Databricks Runtime include un elenco di tutte le librerie installate. Si veda Versioni e compatibilità delle note di rilascio di Databricks Runtime.

Rimuovere i comandi di creazione di SparkSession

Molti carichi di lavoro Apache Spark legacy dichiarano in modo esplicito una nuova sparkSession per ogni processo. Azure Databricks crea automaticamente un oggetto SparkContext per ogni cluster di calcolo e crea una SparkSession isolata per ogni notebook o processo eseguito nel cluster. È possibile mantenere la possibilità di compilare e testare il codice in locale e quindi distribuirlo in Azure Databricks aggiornando questi comandi per usare SparkSession.builder().getOrCreate().

Rimuovere i comandi script del terminale

Apache Spark richiede ai programmi di dichiarare in modo esplicito che sono completati usando comandi come sys.exit() o sc.stop(). Azure Databricks termina e pulisce automaticamente i processi man mano che raggiungono il completamento, quindi questi comandi non sono necessari e devono essere rimossi.

Azure Databricks inoltre termina e pulisce automaticamente i carichi di lavoro Structured Streaming alla terminazione dell'esecuzione, in modo da poter rimuovere awaitTermination() e comandi simili dalle applicazioni Structured Streaming. Vedere Quando usare awaitTermination().

Fidati di Azure Databricks per configurare il cluster

Azure Databricks configura tutte le impostazioni per il driver e gli executor nel cluster di calcolo automaticamente per ottimizzare la resilienza e l'utilizzo delle risorse. La fornitura di configurazioni personalizzate per gli executor o JVM può comportare una riduzione delle prestazioni. Databricks consiglia di impostare solo le configurazioni spark necessarie per controllare la gestione o le funzioni dei tipi in modo che la logica rimanga coerente.

Esegui i carichi di lavoro

Dopo aver rimosso modelli, comandi e impostazioni che potrebbero interferire con Azure Databricks'esecuzione, è possibile eseguire i carichi di lavoro in un ambiente di test e confrontare le prestazioni e i risultati con l'infrastruttura legacy. Anche se molte delle competenze che il team potrebbe aver sviluppato per risolvere i problemi e migliorare le prestazioni per i carichi di lavoro Apache Spark possono comunque essere sfruttate su Azure Databricks, più spesso è possibile ottenere maggiori vantaggi dai passaggi di aggiornamento per usare nuove funzionalità nei prodotti Apache Spark, Delta Lake o personalizzati Azure Databricks.