Condividi tramite


Che cos'è l'ottimizzazione automatica per le configurazioni di Apache Spark in Fabric?

L'ottimizzazione automatica regola automaticamente la configurazione di Apache Spark per velocizzare l'esecuzione del carico di lavoro e ottimizzare le prestazioni complessive. L'ottimizzazione automatica consente di risparmiare tempo e risorse rispetto all'ottimizzazione manuale, che grandi sforzi, risorse, tempo e sperimentazione. L'ottimizzazione automatica usa i dati di esecuzione storici dei carichi di lavoro per individuare e applicare in modo iterativo le configurazioni più efficaci per un carico di lavoro specifico.

Nota

La funzionalità di ottimizzazione delle query di ottimizzazione automatica in Microsoft Fabric è attualmente in anteprima. L'ottimizzazione automatica è disponibile in tutte le aree di produzione, ma è disabilitata per impostazione predefinita. È possibile attivarla tramite l'impostazione di configurazione Spark all'interno dell'ambiente o all'interno di una singola sessione includendo la rispettiva impostazione Spark nel notebook Spark o nel codice di definizione del processo Spark.

Ottimizzazione delle query

L'ottimizzazione automatica configura tre impostazioni di Apache Spark per ognuna delle query separatamente:

  • spark.sql.shuffle.partitions: imposta il numero di partizioni per la sequenza casuale dei dati durante l'unione o le aggregazioni. Il valore predefinito è 200.
  • spark.sql.autoBroadcastJoinThreshold: imposta le dimensioni massime della tabella in byte trasmessa a tutti i nodi di lavoro quando viene eseguita l'operazione di unione. Il valore predefinito è 10 MB.
  • spark.sql.files.maxPartitionBytes: definisce il numero massimo di byte da comprimere in una singola partizione durante la lettura dei file. Funziona per origini basate su file Parquet, JSON e ORC. Il valore predefinito è 128 MB.

Suggerimento

L'ottimizzazione delle query di ottimizzazione automatica esamina le singole query e crea un modello ML distinto per ogni query. Mira in particolare a:

  • Query ripetitive
  • Query con esecuzione prolungata (quelle con più di 15 secondi di esecuzione)
  • Query di API SQL Apache Spark (escluse quelle scritte nell'API RDD, che sono molto rare), ma tutte le query vengono ottimizzate indipendentemente dal linguaggio (Scala, PySpark, R, Spark SQL)

Questa funzionalità è compatibile con i notebook, le definizioni dei processi di Apache Spark e le pipeline. I vantaggi variano in base alla complessità della query, ai metodi usati e alla struttura. Test approfonditi hanno dimostrato che i maggiori vantaggi sono realizzati con le query correlate all'analisi esplorativa dei dati, ad esempio la lettura dei dati, l'esecuzione di unioni, aggregazioni e ordinamento.

Screenshot del tempo di esecuzione con ottimizzazione automatica abilitata.

Intuizione basata sull'intelligenza artificiale dietro l'ottimizzazione automatica

La funzionalità di ottimizzazione automatica usa un processo iterativo per ottimizzare le prestazioni delle query. Inizia con una configurazione predefinita e impiega un modello di Machine Learning per valutare l'efficacia. Quando un utente invia una query, il sistema recupera i modelli archiviati in base alle interazioni precedenti. Genera potenziali configurazioni relative a un'impostazione predefinita denominata centroid. Viene applicato il candidato migliore stimato dal modello. Dopo l'esecuzione della query, i dati sulle prestazioni vengono inviati nuovamente al sistema per perfezionare il modello.

Il ciclo di feedback sposta gradualmente il centroide verso le impostazioni ottimali. Ottimizza le prestazioni nel corso del tempo riducendo al minimo il rischio di regressione. Gli aggiornamenti continui basati sulle query utente consentono di affinare i benchmark delle prestazioni. Per di più, il processo aggiorna le configurazioni di centroid per garantire che il modello si sposti verso impostazioni più efficienti in modo incrementale. Ciò si ottiene valutando le prestazioni passate e utilizzandole per orientare le modifiche future. Fa uso di tutti i punti dati per attenuare l'impatto delle anomalie.

Dalla prospettiva dell'intelligenza artificiale responsabile, la funzionalità Ottimizzazione automatica include meccanismi di trasparenza progettati per fornire informazioni sull'utilizzo dei dati e sui vantaggi. La sicurezza e la privacy sono allineate agli standard di Microsoft. Il monitoraggio continuo mantiene le prestazioni e l'integrità del sistema dopo il lancio.

Abilitare l'ottimizzazione automatica

L'ottimizzazione automatica è disponibile in tutte le aree di produzione, ma è disabilitata per impostazione predefinita. È possibile attivarla tramite l'impostazione di configurazione di Spark all'interno dell'ambiente. Per abilitare l'ottimizzazione automatica, creare un nuovo ambiente o, per l'ambiente esistente, impostare la proprietà Spark “spark.ms.autotune.enabled = true” come mostrato nello screenshot seguente. Questa impostazione viene quindi ereditata da tutti i notebook e i processi in esecuzione in tale ambiente, ottimizzandoli automaticamente.

Screenshot dell'abilitazione dell'ottimizzazione automatica.

L'ottimizzazione automatica include un meccanismo predefinito per il monitoraggio delle prestazioni e il rilevamento delle regressioni delle prestazioni. Ad esempio, se una query elabora una quantità insolitamente elevata di dati, l'ottimizzazione automatica si disattiverà automaticamente. Occorrono in genere da 20 a 25 iterazioni per imparare a identificare la configurazione ottimale.

Nota

L'ottimizzazione automatica è compatibile con Fabric Runtime 1.1 e Runtime 1.2. L'ottimizzazione automatica non funziona quando la modalità di concorrenza elevata o l'endpoint privato sono abilitati. Tuttavia, l'ottimizzazione automatica si integra perfettamente con la scalabilità automatica, indipendentemente dalla configurazione.

È possibile abilitare l'ottimizzazione automatica all'interno di una singola sessione includendo la rispettiva impostazione Spark nel notebook Spark o nel codice di definizione del processo Spark.

%%sql
SET spark.ms.autotune.enabled=TRUE

È possibile controllare l'ottimizzazione automatica tramite le impostazioni di Spark per il rispettivo notebook Spark o il codice di definizione del processo Spark. Per disabilitare l'ottimizzazione automatica, eseguire i comandi seguenti come prima cella (notebook) o riga del codice (SJD).

%%sql 
SET spark.ms.autotune.enabled=FALSE 

Case study

Quando si esegue una query con Apache Spark, l'ottimizzazione automatica crea un modello ML personalizzato dedicato all'ottimizzazione dell'esecuzione della query. Analizza i modelli di query e le esigenze delle risorse. Si consideri una query iniziale che filtra un set di dati in base a un attributo specifico, ad esempio un Paese. Anche se in questo esempio viene usato il filtro geografico, il principio si applica universalmente a qualsiasi attributo o operazione all'interno della query:

%%pyspark
df.filter(df.country == "country-A")

L'ottimizzazione automatica impara da questa query, ottimizzando le esecuzioni successive. Quando la query cambia, ad esempio, modificando il valore del filtro o applicando una trasformazione dei dati diversa, l'essenza strutturale della query rimane spesso coerente:

%%pyspark
df.filter(df.country == "country-B")

Nonostante le modifiche, l'ottimizzazione automatica identifica la struttura fondamentale della nuova query, implementando ottimizzazioni apprese in precedenza. Questa funzionalità garantisce un'efficienza elevata prolungata senza la necessità della riconfigurazione manuale per ogni nuova iterazione di query.

Registri

Per ognuna delle query, l'ottimizzazione automatica determina le impostazioni più ottimali per tre configurazioni Spark. È possibile visualizzare le impostazioni suggerite consultando i log. Le configurazioni consigliate dall'ottimizzazione automatica si trovano nei log del driver, in particolare quelle voci che iniziano con [Autotune].

Screenshot dei log di ottimizzazione automatica all'interno dell'hub di monitoraggio.

È possibile trovare vari tipi di voci nei log. Di seguito sono riportate quelle principali:

Stato Descrizione
AUTOTUNE_DISABLED Operazione ignorata. L'ottimizzazione automatica è disabilitata; in questo modo, si impedisce il recupero dei dati di telemetria e l'ottimizzazione delle query. Abilitare l'ottimizzazione automatica per usare completamente le sue funzionalità rispettando al contempo la privacy dei clienti".
QUERY_TUNING_DISABLED Operazione ignorata. L'ottimizzazione automatica delle query è disabilitata. Abilitarla per perfezionare le impostazioni per le query Spark SQL.
QUERY_PATTERN_NOT_MATCH Operazione ignorata. Il modello di query non è corrispondente. L'ottimizzazione automatica è efficace per le query di sola lettura.
QUERY_DURATION_TOO_SHORT Operazione ignorata. La durata della query è troppo breve per l'ottimizzazione. L'ottimizzazione automatica richiede query più lunghe per un'operazione efficace. Le query devono essere eseguite per almeno 15 secondi.
QUERY_TUNING_SUCCEED Esito positivo. Ottimizzazione delle query completata. Impostazioni Spark ottimali applicate.

Nota sulla trasparenza

In conformità allo standard di intelligenza artificiale responsabile, questa sezione mira a chiarire gli usi e la convalida della funzionalità di ottimizzazione automatica, promuovendo la trasparenza e consentendo un processo decisionale basato su informazioni aggiornate.

Finalità dell'ottimizzazione automatica

L'ottimizzazione automatica è sviluppata per migliorare l'efficienza del carico di lavoro Apache Spark, principalmente per i professionisti dei dati. Le sue funzioni chiave includono:

  • Automazione dell'ottimizzazione della configurazione di Apache Spark per ridurre i tempi di esecuzione.
  • Riduzione al minimo degli sforzi di ottimizzazione manuale.
  • Utilizzo dei dati storici del carico di lavoro per perfezionare le configurazioni in modo iterativo.

Convalida dell'ottimizzazione automatica

L'ottimizzazione automatica è stata sottoposta a test approfonditi per garantire la sua efficacia e sicurezza:

  • Test rigorosi con carichi di lavoro Spark diversi per verificare l'efficacia dell'algoritmo di ottimizzazione.
  • Benchmarking su metodi di ottimizzazione Spark standard per illustrare i vantaggi delle prestazioni.
  • Case study reali che evidenziano il valore pratico dell'ottimizzazione automatica.
  • Conformità a rigorosi standard di sicurezza e privacy per proteggere i dati degli utenti.

I dati utente vengono usati esclusivamente per migliorare le prestazioni del carico di lavoro, con protezioni affidabili per impedire l'uso improprio o l'esposizione di informazioni riservate.