Panoramica delle fasi Spark
Una fase di un processo di esecuzione non è altro che un livello attraverso il quale deve passare ciascuna delle attività. L'intero processo di accensione è suddiviso in più fasi per l'elaborazione efficiente dei dati. Ogni attività viene eseguita in una partizione separata.
Ogni volta che una domanda di lavoro spark viene inviata a Spark dall'utente, il driver Spark la accetta e identifica i diversi tipi di azioni / trasformazioni presenti nell'applicazione. Inoltre, queste operazioni saranno organizzate in un diagramma di flusso chiamato DAG. Un DAG (Directed Acyclic Graph) viene creato ogni volta che un'azione o una trasformazione viene richiamata sul RDD che a sua volta chiama DAGScheduler.
Il significato di DAG è il seguente:
- Diretto: tutti i nodi sono collegati tra loro creando un grafico aciclico. La sequenza di ciò è determinata dalle azioni richiamate sul RDD.
- Aciclico: i nodi non sono collegati come un ciclo ciclico, cioè se un'azione o una trasformazione sono state eseguite una volta, non è possibile ripristinare il valore originale.
- Grafico: l'intero modello formato dai bordi e dai vertici disposti insieme in un modello specifico è chiamato grafico. I vertici non sono altro che i RDD e i bordi sono le azioni chiamate sul RDD.
DAGScheduler è quello che divide le fasi in una serie di attività. DAGScheduler passa quindi le informazioni sullo stage al gestore cluster (YARN / Spark autonomo) che attiva l'utilità di pianificazione per eseguire le attività. Il driver Spark converte il piano logico in un piano di esecuzione fisico. I lavori Spark vengono eseguiti nel metodo di pipeline in cui tutte le attività di trasformazione sono combinate in un unico stadio.
trasformazioni
Esistono 2 tipi di trasformazioni che avvengono:
1. Trasformazioni strette : si tratta di trasformazioni che non richiedono il processo di mescolamento. Queste azioni possono essere eseguite in una singola fase.
Esempio: map () e filter ()
2. Trasformazioni estese : si tratta di trasformazioni che richiedono il mescolamento tra varie partizioni. Quindi richiede la creazione di diverse fasi per la comunicazione tra diverse partizioni.
Esempio: ReduceByKey
Facciamo un esempio per una migliore comprensione di come funziona.
Esempio: in questo esempio, vedremo come funziona un semplice conteggio parole usando Spark DAGScheduler.
- val data = sc.textFile (“data.txt”)
Risultato: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) at textFile at: 24
Innanzitutto, viene eseguita un'operazione textFile per leggere il file di testo di input specificato dalla posizione HDFS.
- data.flatMap (_. split (”“)). map (i => (i, 1)). reduceByKey (_ + _). collect
Risultato: res21: Array ((String, Int)) = Array ()
Successivamente, viene eseguita un'operazione flatMap per dividere le righe nell'intero file di input in parole diverse. Quindi viene eseguita un'operazione sulla mappa per formare coppie (chiave, valore) come (parola, 1) per ciascuna delle parole. E viene chiamata la funzione reduceByKey per trovare la somma dei conteggi per ogni parola. Infine, l'azione collettiva darà il risultato finale raccogliendo tutti i dati.
Durante questo programma, Spark crea 2 fasi perché qui viene eseguita una trasformazione. Durante l'operazione di trasformazione, è necessario eseguire il mescolamento perché i dati devono essere mescolati tra 2 o più partizioni diverse. Pertanto, viene creato uno stage e quindi viene creato un altro singolo stage per l'attività di trasformazione.
Anche internamente queste fasi saranno divise in compiti. In questo esempio, ogni fase è divisa in 2 attività poiché esistono 2 partizioni. Ogni partizione esegue una singola attività.
Tipi di stadi di accensione
Ecco i due tipi di stadi scintilla indicati di seguito
1. ShuffleMapStage
Questo è fondamentalmente uno stadio intermedio del processo di esecuzione del DAG. L'output di questo stage viene utilizzato come input per ulteriori stage. L'output di questo è sotto forma di file di output della mappa che possono essere successivamente utilizzati riducendo l'attività. Uno ShuffleMapStage è considerato pronto quando sono disponibili tutti gli output della mappa. A volte le posizioni di output possono mancare nei casi in cui le partizioni vengono perse o non disponibili.
Questa fase può contenere molte operazioni della pipeline come map () e filter () prima dell'esecuzione del mescolamento. Registri interni outputLocs e _numAvailableOutputs vengono utilizzati da ShuffleMapStage per tenere traccia del numero di output della shuffle map. Un singolo ShuffleMapStage può essere utilizzato comunemente in vari lavori.
2. ResultStage
Come suggerisce il nome stesso, questa è la fase finale di un processo Spark che esegue un'operazione su una o più partizioni di un RDD per calcolarne il risultato. L'inizializzazione di registri e contatori interni viene eseguita da ResultStage.
DAGScheduler invia eventuali attività mancanti a ResultStage per il calcolo. Per il calcolo, richiede vari parametri obbligatori come stageId, stageAttempId, la variabile di trasmissione dell'attività serializzata, la partizione, TaskLocations preferite, outputId, alcune proprietà locali, TaskMetrics di quel particolare stadio. Alcuni dei parametri opzionali richiesti sono ID lavoro, ID applicazione e ID tentativo applicazione.
Vantaggi delle fasi Spark
Di seguito sono riportati i diversi vantaggi di Spark Stages:
1. Allocazione dinamica degli esecutori
Vedendo la sequenza temporale degli eventi Spark Job, possiamo vedere che l'allocazione degli esecutori viene eseguita in modo dinamico. Ciò significa che gli esecutori vengono chiamati dal cluster in base al carico di lavoro durante l'esecuzione dell'attività. Viene quindi rilasciato nuovamente nel cluster non appena il suo lavoro è terminato. Ciò consente di risparmiare la memoria di allocazione delle risorse e consente alle altre applicazioni in esecuzione sullo stesso cluster di riutilizzare gli esecutori. Quindi l'utilizzo complessivo del cluster aumenterà e sarà ottimale.
2. Memorizzazione nella cache
Gli RDD vengono memorizzati nella cache durante le operazioni eseguite su di essi su ogni fase e memorizzati nella memoria. Questo è utile per risparmiare tempo di calcolo quando il risultato finale richiede che gli stessi RDD vengano letti di nuovo da HDFS.
3. Esecuzione parallela
I lavori spark che sono indipendenti l'uno dall'altro vengono eseguiti in parallelo a meno che e fino a quando non è richiesto un shuffling o l'ingresso di uno stadio dipende dall'output precedente.
4. Visualizzazione DAG
Questo è molto utile nei casi di calcoli complessi in cui sono coinvolte molte operazioni e le loro dipendenze. Vedendo questa visualizzazione DAG, si può facilmente tracciare il flusso e identificare i blocchi delle prestazioni. Inoltre, si può vedere ciascuna delle attività eseguite da ciascuna fase facendo clic sulle fasi mostrate in questa visualizzazione. In questa vista espansa, vengono mostrati tutti i dettagli degli RDD che appartengono a questo stadio.
5. Tolleranza ai guasti
A causa dell'operazione di memorizzazione nella cache eseguita su RDD, il DAG avrà una registrazione di ogni azione eseguita su di essi. Quindi supponiamo che in ogni caso un RDD venga perso, può essere facilmente recuperato con l'aiuto di DAG. Cluster Manager può essere utilizzato per identificare la partizione in cui è stata persa e lo stesso RDD può essere nuovamente inserito nella stessa partizione per il recupero della perdita di dati.
A causa dei vantaggi di cui sopra, Apache Spark viene ampiamente utilizzato al posto del MapReduce precedentemente utilizzato. Le fasi Spark non sono altro che una versione estesa di MapReduce. Poiché MapReduce richiedeva la lettura e la scrittura dei dati su HDFS più volte, è stato introdotto Spark che esegue queste azioni nella memoria.
Conclusione
Quindi possiamo concludere che gli stadi Spark sono più efficienti a causa del loro calcolo in memoria, della maggiore velocità di elaborazione anche per l'elaborazione iterativa.
Articoli consigliati
Questa è una guida alle fasi Spark. Qui discutiamo i tipi di trasformazione e i tipi e i vantaggi delle fasi di accensione. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più -
- Come installare Spark
- Spark Streaming
- Carriera in Spark
- Domande di intervista a Spark
- Panoramica e primi 6 componenti di Spark