Concetti principali su Apache Spark in Azure Synapse Analytics

Apache Spark è un framework di elaborazione parallela che supporta l'elaborazione in memoria per migliorare le prestazioni di applicazioni analitiche di Big Data. Apache Spark in Azure Synapse Analytics è una delle implementazioni Microsoft di Apache Spark nel cloud.

Azure Synapse semplifica la creazione e la configurazione delle funzionalità di Spark in Azure. Azure Synapse fornisce un'implementazione diversa di queste funzionalità Spark documentate qui.

Pool di Spark

Nel portale di Azure viene creato un pool di Apache Spark serverless. È la definizione di un pool di Spark che, in caso di creazione di istanze, viene usata per creare un'istanza di Spark che elabora i dati. Quando viene creato, un pool di Spark esiste solo in forma di metadati e non viene utilizzata, eseguita o addebitata alcuna risorsa. Un pool di Spark ha una serie di proprietà che controllano le caratteristiche di un'istanza di Spark. Queste caratteristiche includono, in via esemplificativa, un nome, le dimensioni, il comportamento di scalabilità e la durata (TTL).

Poiché la creazione di pool di Spark non comporta costi o utilizzo di risorse, è possibile crearne un numero illimitato con tutte le configurazioni diverse necessarie. Ai pool di Spark possono anche essere applicate autorizzazioni che consentono agli utenti di accedere solo a determinati pool.

Come procedura consigliata, creare pool di Spark di dimensioni inferiori che possano essere usati per lo sviluppo e il debug e quindi pool più grandi per l'esecuzione di carichi di lavoro di produzione.

Per informazioni su come creare un pool di Spark e visualizzarne tutte le proprietà, vedere Introduzione ai pool di Spark in Azure Synapse Analytics

Istanze di Spark

Le istanze di Spark vengono create quando ci si connette a un pool di Spark, si crea una sessione e si esegue un processo. Dato che più utenti possono avere accesso a un singolo pool di Spark, viene creata una nuova istanza di Spark per ogni utente che si connette.

Quando si invia un secondo processo, se è presente capacità nel pool, anche l'istanza di Spark esistente ha capacità. L'istanza esistente elabora quindi il processo. In caso contrario, se la capacità è disponibile a livello di pool, viene creata una nuova istanza di Spark.

La fatturazione per le istanze viene avviata all'avvio delle macchine virtuali di Azure. La fatturazione per le istanze del pool di Spark si arresta quando le istanze del pool passano alla terminazione. Per altre informazioni su come vengono avviate e deallocate le macchine virtuali di Azure, vedere Stati e stato di fatturazione di Azure Macchine virtuali.

Esempi

Esempio 1

  • Si crea un pool di Spark denominato SP1; ha una dimensione fissa del cluster di 20 nodi medi
  • Si invia un processo notebook, J1 che usa 10 nodi, un'istanza di Spark, SI1 viene creata per elaborare il processo
  • È ora possibile inviare un altro processo, J2, che usa 10 nodi perché è ancora presente capacità nel pool e l'istanza, J2, viene elaborata da SI1
  • Se J2 avesse chiesto 11 nodi, non ci sarebbe stata capacità in SP1 o SI1. In questo caso, se J2 proviene da un notebook, il processo viene rifiutato; se J2 proviene da un processo batch, viene accodato.
  • La fatturazione inizia all'invio del processo notebook J1.
    • Il pool di Spark viene creato un'istanza con 20 nodi medi, ognuno con 8 vCore e in genere richiede circa 3 minuti per l'avvio. 20 x 8 = 160 vCore.
    • A seconda del tempo di avvio esatto del pool di Spark, il timeout di inattività e il runtime dei due processi del notebook; È probabile che il pool venga eseguito per un periodo compreso tra 18 e 20 minuti (tempo di creazione di istanze del pool spark + runtime del processo del notebook + timeout di inattività).
    • Supponendo che il runtime di 20 minuti, 160 x 0,3 ore = 48 ore vCore.
    • Nota: le ore vCore vengono fatturate al minuto e i prezzi di vCore variano in base all'area di Azure. Per altre informazioni, vedere Prezzi di Azure Synapse

Esempio 2

  • Si crea una chiamata al pool di Spark SP2; ha una scalabilità automatica abilitata con un minimo di 10 a un massimo di 20 nodi medi
  • Si invia un processo del notebook J1 che usa 10 nodi; viene creata un'istanza di Spark SI1 per elaborare il processo
  • Si invia ora un altro processo J2 che usa 10 nodi; poiché nel pool è ancora presente capacità, l'istanza viene ridimensionata automaticamente a 20 nodi ed elabora J2.
  • La fatturazione inizia all'invio del processo notebook J1.
    • Il pool di Spark viene creato un'istanza con 10 nodi medi, ognuno con 8 vCore e in genere richiede circa 3 minuti per l'avvio. 10 x 8, 80 vCore.
    • All'invio di J2, il pool viene ridimensionato automaticamente aggiungendo altri 10 nodi medi e in genere la scalabilità automatica richiede 4 minuti. Aggiunta di 10 x 8, 80 vCore per un totale di 160 vCore.
    • A seconda del tempo di avvio del pool di Spark, del runtime del primo processo del notebook J1, del tempo necessario per aumentare le prestazioni del pool, del runtime del secondo notebook e infine del timeout di inattività; È probabile che il pool venga eseguito tra 22 e 24 minuti (tempo di creazione di istanze del pool spark + runtime del processo del notebook J1 tutti a 80 vCore) + (tempo di scalabilità automatica del pool di Spark + runtime del processo del notebook J2 + timeout di inattività tutti a 160 vCore).
    • 80 vCore per 4 minuti + 160 vCore per 20 minuti = 58,67 ore vCore.
    • Nota: le ore vCore vengono fatturate al minuto e i prezzi di vCore variano in base all'area di Azure. Per altre informazioni, vedere Prezzi di Azure Synapse

Esempio 3

  • Creare un pool di Spark denominato SP1, con una dimensione del cluster predefinita di 20 nodi.
  • Si invia un processo del notebook J1 che usa 10 nodi; viene creata un'istanza di Spark SI1 per elaborare il processo.
  • Un altro utente U2 invia un processo J3 che usa 10 nodi; viene creata una nuova istanza di Spark SI2 per elaborare il processo.
  • Si invia ora un altro processo J2 che usa 10 nodi; poiché è ancora presente capacità nel pool e l'istanza J2 viene elaborata da SI1.
  • La fatturazione inizia all'invio del processo notebook J1.
    • Il pool di Spark SI1 viene creata un'istanza con 20 nodi medi, ognuno con 8 vCore e in genere richiede circa 3 minuti per l'avvio. 20 x 8, 160 vCore.
    • A seconda dell'ora esatta di avvio del pool di Spark, del timeout dell'ide e del runtime del primo e del terzo processo del notebook; È probabile che il pool SI1 venga eseguito per un periodo compreso tra 18 e 20 minuti (tempo di creazione di istanze del pool spark + runtime del processo del notebook e timeout di inattività).
    • Viene creata un'istanza di un altro pool di Spark SI2 con 20 nodi medi, ognuno con 8 vCore e in genere richiede circa 3 minuti per l'avvio. 20 x 8, 160 vCore
    • A seconda dell'ora esatta di avvio del pool di Spark, il timeout dell'ide e il runtime del primo processo del notebook; È probabile che il pool SI2 venga eseguito per un periodo compreso tra 18 e 20 minuti (tempo di creazione di istanze del pool spark + runtime del processo del notebook e timeout di inattività).
    • Supponendo che i due pool vengano eseguiti per 20 minuti ciascuno, 160 x .03 x 2 = 96 ore vCore.
    • Nota: le ore vCore vengono fatturate al minuto e i prezzi di vCore variano in base all'area di Azure. Per altre informazioni, vedere Prezzi di Azure Synapse

Quote e vincoli delle risorse in Apache Spark per Azure Synapse

Livello di area di lavoro

Ogni area di lavoro di Azure Synapse dispone di una quota predefinita di vCore che possono essere usati per Spark. La quota è suddivisa tra quota utente e quota del flusso di dati, in modo che nessuno dei due modelli di utilizzo usi tutti i vCore dell'area di lavoro. La quota varia a seconda del tipo di sottoscrizione, ma è divisa in modo simmetrico tra utente e flusso di lavoro. Tuttavia, se si richiedono più vCore rispetto a quelli rimanenti nell'area di lavoro, verrà visualizzato l'errore seguente:

Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://go.microsoft.com/fwlink/?linkid=213499

Il collegamento nel messaggio rimanda a questo articolo.

L'articolo seguente spiega come richiedere un aumento della quota di vCore dell'area di lavoro.

  • Selezionare "Azure Synapse Analytics" come tipo di servizio.
  • Nella finestra Dettagli quota selezionare Apache Spark (vCore) per area di lavoro

Richiedere un aumento di capacità tramite il portale di Azure

Livello di pool di Spark

Quando si definisce un pool di Spark si definisce in modo efficace una quota per ogni utente per tale pool, se si eseguono più notebook o processi o una combinazione di 2 è possibile esaurire la quota del pool. In tal caso, verrà generato un messaggio di errore

Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool

Per risolvere questo problema, è necessario ridurre l'utilizzo delle risorse del pool prima di inviare una nuova richiesta di risorsa eseguendo un notebook o un processo.

Passaggi successivi