Condividi tramite


Modalità ad elevata concorrenza in Apache Spark per Fabric

La modalità di concorrenza elevata consente ai carichi di lavoro Spark compatibili di condividere una sessione Spark in esecuzione anziché avviare una sessione separata per ogni carico di lavoro. Questa modalità viene comunemente usata per gli scenari di notebook e pipeline in Fabric.

Questo articolo consente di comprendere:

  • Qual è la modalità di concorrenza elevata e quando usarla.
  • Requisiti per la condivisione delle sessioni.
  • Funzionamento della fatturazione per le sessioni condivise.

In modalità standard, ogni attività del notebook o della pipeline avvia la propria sessione Spark. In modalità di concorrenza elevata, un'applicazione Spark ospita più carichi di lavoro assegnando a ogni carico di lavoro il proprio core REPL (Read-eval-Print Loop). Ogni core REPL isola lo stato di esecuzione, quindi le variabili locali in un carico di lavoro non sovrascrivono le variabili in un altro carico di lavoro.

Poiché la sessione condivisa è già in esecuzione, i carichi di lavoro successivi possono iniziare molto più velocemente.

Nota

Per i pool personalizzati con modalità di concorrenza elevata, l'avvio della sessione può essere fino a 36 volte più veloce rispetto a una sessione Spark standard.

Funzionalità principali

Il diagramma evidenzia tre caratteristiche principali della modalità di concorrenza elevata:

  • Sicurezza: la condivisione delle sessioni rimane entro un limite utente singolo.
  • Multitasking: è possibile passare da un notebook all'altro e continuare a funzionare senza attendere la creazione o l'inizializzazione di una nuova sessione Spark.
  • Efficienza dei costi: le sessioni condivise migliorano l'utilizzo delle risorse e riducono i costi di calcolo per i carichi di lavoro di data engineering e data science.

Diagramma che mostra il funzionamento della modalità ad elevata concorrenza in Fabric.

Requisiti di condivisione delle sessioni

La condivisione delle sessioni si applica quando vengono soddisfatte queste condizioni:

  • Le sessioni si trovano all'interno di un limite utente singolo.
  • Le sessioni usano la stessa configurazione predefinita di Lakehouse.
  • Le sessioni usano le stesse impostazioni di calcolo di Spark.

Se un requisito è diverso, Fabric avvia una sessione Spark separata.

Durante l'inizializzazione della sessione, Fabric crea un core REPL. Man mano che i nuovi carichi di lavoro vengono aggiunti alla sessione condivisa, gli executor vengono allocati usando la pianificazione FAIR sui core REPL per ridurre il rischio di carestia.

Comportamento di fatturazione

Quando si usa la modalità di concorrenza elevata, viene fatturata solo l'attività del notebook o della pipeline di avvio che avvia l'applicazione Spark condivisa. Le sessioni successive che condividono la stessa sessione spark non comportano fatturazione separata.

Example

  • Un utente avvia Notebook 1, che avvia una sessione Spark in modalità di concorrenza elevata.
  • La stessa sessione viene quindi condivisa da Notebook 2, Notebook 3, Notebook 4 e Notebook 5.
  • In questo caso, solo notebook 1 viene fatturato per il calcolo Spark.
  • I notebook condivisi (da 2 a 5) non vengono fatturati singolarmente.

Questo comportamento si riflette anche nelle metriche della capacità, in cui l'utilizzo viene segnalato rispetto al notebook di avvio.

Nota

Lo stesso comportamento di fatturazione si applica alle attività della pipeline. Viene addebitato solo il notebook o l'attività che ha avviato la sessione Spark.

Limite di condivisione delle sessioni dinamiche

Per impostazione predefinita, una sessione di concorrenza elevata supporta fino a cinque notebook che condividono la stessa sessione Spark. Per i carichi di lavoro che richiedono una maggiore densità di notebook, ad esempio pipeline parallele su larga scala o analisi aziendale al picco di carico, è possibile aumentare questo limite a un massimo di 50 notebook per sessione.

Nota

Questo aggiornamento non modifica il limite predefinito di cinque. È necessario impostare spark.highConcurrency.max in modo esplicito per aumentarlo.

Configurare il limite di condivisione della sessione

Impostare il limite di condivisione della sessione nell'elemento Ambiente usato dai notebook o dai notebook attivati dalla pipeline.

  1. Passare all'area di lavoro e aprire Ambienti.

  2. Seleziona l'ambiente collegato al notebook o alla pipeline.

  3. Aprire Proprietà Spark.

  4. Aggiungere la proprietà seguente e impostare un valore compreso tra 2 e 50:

    spark.highConcurrency.max = <value>
    

    Ad esempio, per consentire fino a 20 notebook per sessione:

    spark.highConcurrency.max = 20
    
  5. Salva e pubblica l'Ambiente.

Tutti i notebook e le attività della pipeline che usano questo ambiente ereditano automaticamente il limite aggiornato.

Quando aumentare il limite di condivisione delle sessioni

Scenario Azione consigliata
Pipeline parallele su larga scala con molte attività del notebook Aumentare spark.highConcurrency.max per ridurre la frammentazione della sessione
Carichi di lavoro interattivi con carico di picco con molti utenti simultanei Aumentare il limite per migliorare i tempi di acquisizione delle sessioni
Carichi di lavoro sensibili ai costi in cui la compressione densa riduce la spesa di calcolo Ottimizzare il limite per soddisfare i requisiti di concorrenza
Carichi di lavoro con requisiti di isolamento rigorosi Mantenere il limite predefinito di 5 o inferiore

L'aumento del limite di condivisione della sessione consente di:

  • Acquisizione più rapida della sessione durante il picco del carico riducendo il tempo di attesa per una nuova sessione.
  • Più elevata densità del computer portatile senza suddividere in molte sessioni separate.
  • Ottimizzazione dinamica allineata agli obiettivi di intensità, costo e prestazioni del carico di lavoro.
  • Migliore efficienza delle prestazioni dei prezzi mantenendo l'isolamento e l'equità tra i posti di lavoro.