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 è disponibile capacità nel pool, anche l'istanza di Spark esistente avrà la capacità richiesta. L'istanza esistente elabora quindi il processo. In alternativa, 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 VM di Azure. La fatturazione per le istanze del pool di Spark si arresta quando le istanze del pool passano alla terminazione. Per altre informazioni sull'avvio e la deallocazione delle VM di Azure, vedere Stati e stato di fatturazione delle macchine virtuali di Azure.
Esempi
Esempio 1
- Creare un pool di Spark denominato SP1, con una dimensione del cluster predefinita di 20 nodi medi
- Inviare un processo notebook, J1, che usa 10 nodi. Viene creata l'istanza di Spark SI1 per elaborare il processo
- Inviare ora un altro processo, J2, che usa 10 nodi perché c'è ancora capacità nel pool. L'istanza, J2, viene elaborata da SI1
- Se J2 avesse richiesto 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 al momento dell'invio del processo notebook J1.
- Viene creata un’istanza del pool di Spark con 20 nodi medi, ognuno con 8 vCore; l’avvio di tale operazione richiede in genere circa 3 minuti. 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 di Spark + runtime del processo del notebook + timeout di inattività).
- Supponendo il runtime di 20 minuti, 160 x 0,3 ore = 48 ore vCore.
- Nota: le ore vCore vengono fatturate al minuto, 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
- Inviare un processo notebook, J1, che usa 10 nodi. Viene creata l'istanza di Spark SI1 per elaborare il processo
- Inviare ora un altro processo, J2, che usa 10 nodi perché c'è ancora capacità nel pool. L'istanza scala automaticamente a 20 nodi ed elabora J2.
- La fatturazione inizia al momento dell'invio del processo notebook J1.
- Viene creata un’istanza del pool di Spark con 10 nodi medi, ognuno con 8 vCore; l’avvio di tale operazione richiede in genere circa 3 minuti. 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 di 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, 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.
- Inviare un processo notebook, J1, che usa 10 nodi. Viene creata l'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.
- Inviare ora un altro processo, J2, che usa 10 nodi perché nel pool è ancora disponibile capacità. L'istanza, J2, viene elaborata da SI1.
- La fatturazione inizia al momento dell'invio del processo notebook J1.
- Viene creata un’istanza del pool di Spark SI1 con 20 nodi medi, ognuno con 8 vCore; l’avvio di tale operazione richiede in genere circa 3 minuti. 20 x 8, 160 vCore.
- A seconda del tempo di avvio esatto del pool di Spark, il timeout di inattività e il 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 di Spark + runtime del processo del notebook + timeout di inattività).
- Viene creata un’altra istanza del pool di Spark SI2 con 20 nodi medi, ognuno con 8 vCore; l’avvio di tale operazione richiede in genere circa 3 minuti. 20 x 8, 160 vCore
- A seconda del tempo di avvio esatto del pool di Spark, il timeout di inattività 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 di Spark + runtime del processo del notebook + 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, 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 di quanti ne rimangono nell'area di lavoro, si riceve il messaggio di 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 effetti una quota per utente per tale pool. Se si eseguono più notebook o processi o una combinazione dei due, è possibile esaurire la quota del pool. In tal caso, viene 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 il problema, è necessario ridurre l'utilizzo delle risorse del pool prima di inviare una nuova richiesta di risorse eseguendo un notebook o un processo.