Ottimizzazione delle prestazioni in Apache Spark per gli ingegneri dei dati

Contenuti

Mentre si lavora sul problema di ottimizzazione dell'app Spark, Ho passato molto tempo a cercare di dare un senso alle visualizzazioni dell'interfaccia utente web di Spark. Spark Web UI è uno strumento molto utile per questo compito. Per principianti, diventa molto difficile ottenere informazioni su un problema solo da queste visualizzazioni. Sebbene ci siano ottime risorse sulle prestazioni di Spark, le informazioni erano sparse. Perciò, Ho sentito il bisogno di documentare e condividere i miei insegnamenti.

Destinatari e conclusioni

Questo post presuppone che i lettori abbiano una conoscenza di base dei concetti di Spark.. Questo post aiuterà i principianti a identificare potenziali problemi di prestazioni nelle loro applicazioni in esecuzione da un'interfaccia utente Web Spark.. Il focus è solo sulle informazioni che non sono ovvie dall'interfaccia utente e le inferenze che possono essere tratte da queste informazioni non ovvie. Si noti che non contiene un elenco esaustivo di informazioni da interpretare dall'interfaccia utente Web di Spark, ma solo quelli che ho trovato rilevanti per il mio progetto e, tuttavia, abbastanza generico perché il pubblico lo sappia.

Interfaccia utente web Spark

L'interfaccia utente web di Spark è disponibile solo quando l'applicazione è in esecuzione. Per analizzare le esecuzioni passate, il server della cronologia deve essere abilitato per memorizzare i registri degli eventi che possono quindi essere utilizzati per popolare l'interfaccia utente web.

L'interfaccia utente Web di Spark mostra informazioni utili sulla tua applicazione in schede, vale a dire

  • esecutori
  • Ambiente
  • Lavori
  • Etapas
  • Magazzinaggio

Il post rimanente descrive le intuizioni di ciascuna delle schede, nell'ordine indicato.

Scheda Esecutori

Fornisce informazioni sulle attività eseguite da ciascun esecutore.

Fig 1: Riepilogo della scheda Esecutore

42021immagine201-1198431

A partir de la figura 1, si può capire che c'è un controllore e 5 esecutori, ognuno dei quali corre con 2 core e 3 GB di memoria.

La casella contrassegnata in rosso muestra la distribución desigual de las tareas en las que un nodo del grappolo está exagerando las tareas, mentre altri sono relativamente inattivi.

La casella contrassegnata in blu mostra che la dimensione dei dati di input era 487,3 MB. Ora, questa app è stata eseguita su una dimensione del set di dati di 83 MB. La dimensione dei dati di input comprende la lettura del set di dati originale e i trasferimenti di dati casuali tra i nodi. Questo mostra che molti dati sono stati mischiati (circa 400+ MB) nell'app.

Scheda Ambiente

Ci sono molti proprietà della scintilla per controllare e regolare l'applicazione. Queste proprietà possono essere impostate quando si invia il lavoro o quando si crea l'oggetto contesto. A meno che la proprietà non venga aggiunta esplicitamente, Non si applica. Sbagliamo nel presumere che le proprietà vengano applicate con i loro valori predefiniti, quando non esplicitamente dichiarato. Tutte le proprietà applicate possono essere visualizzate nella scheda Ambiente. Se la proprietà non si vede lì, significa che la proprietà non è stata applicata affatto.

Scheda Lavori

Un trabajo está asociado con una cadena de dependencias Resilient Distributed Dataset organizadas en un grafico aciclico diretto (GIORNO) che assomiglia a Fig. 2. Dalle visualizzazioni DAG, puoi trovare le fasi eseguite e il numero di fasi saltate. Per impostazione predefinita, spark non riutilizza i passaggi calcolati in più fasi, a meno che non sia persistente o esplicitamente memorizzato nella cache. Le fasi saltate sono le fasi memorizzate nella cache contrassegnate in grigio, donde los valores de cálculo se almacenan en la memoria y no se vuelven a calcular después de acceder a HDFS. È sufficiente uno sguardo al display DAG per sapere se i calcoli RDD vengono eseguiti ripetutamente o se vengono utilizzate fasi memorizzate nella cache.

Fig 2: Visualizzazione DAG di un lavoro

54628foto202-8604941

Scheda Fasi

Fornisce una visione più approfondita dell'applicazione in esecuzione a livello di attività. Una fase rappresenta un segmento di lavoro svolto in parallelo da singole attività. C'è una mappatura 1-1 tra compiti e partizioni di dati, vale a dire, 1 attività per partizione dati. Si può approfondire un lavoro, in fasi specifiche e fino a ciascuna attività in una fase dall'interfaccia utente Web di Spark.

Il palco offre una buona panoramica delle esecuzioni: Display DAG, scadenze dell'evento, metriche di riepilogo / aggregazione dei tuoi compiti.

Preferisco guardare le tempistiche degli eventi per analizzare i compiti. Danno una rappresentazione pittorica dei dettagli del tempo investito nell'esecuzione della scena. A prima vista, potremmo trarre rapide deduzioni su come si è svolto bene il palco e su come potremmo migliorare ulteriormente i tempi di esecuzione.

Fig 3 – Esempio di cronologia dell'evento

90162immagine203-7870562

Ad esempio, le inferenze tratte dalla figura 3 potrebbero essere:

  1. I dati sono suddivisi in 15 partizioni. Perciò, Loro stanno correndo 15 lavoretti (rappresentato con 15 linee verdi).
  2. Le attività vengono eseguite in 3 nodi, ognuno con 2 esecutori
  3. La fase viene completata solo quando termina l'attività in esecuzione più lunga. Gli altri esecutori rimangono inattivi fino al termine dell'attività più lunga.
  4. Pochi compiti a lungo termine, mentre poche attività vengono eseguite per un tempo molto breve, indicando che i dati non sono ben partizionati.
  5. Non è stato speso molto tempo per ritardare lo scheduler o la serializzazione in questa fase, che è buono.

Fig. 4 – Cronologia degli eventi a una fase con molte partizioni di dati.

56490immagine204-6220746

Osservando la figura 4, possiamo dedurre che i dati non sono ben distribuiti e partizionati inutilmente. Dalla metrica di valutazione, si può confermare che la pianificazione delle attività ha richiesto più tempo del tempo di esecuzione effettivo. Maggiore è la percentuale di verde nella timeline, più efficiente sarà il calcolo dello stadio.

È auspicabile avere meno fasi del lavoro. Ogni volta che i dati vengono mischiati, si crea una nuova tappa. Mescolare è costoso e, così, prova a ridurre il numero di fasi di cui il tuo programma ha bisogno.

Dimensione dati di input

Un'altra informazione importante è osservare la dimensione di input dei dati che sono stati mescolati. Uno degli obiettivi è anche ridurre la dimensione di questi dati casuali.

Fig. 5 – Panoramica della scheda Fasi.

40949immagine205-6387210

La figura 5 sopra mostra le fasi in cui i dati si muovono in MB. Ciò suggerisce che il codice può essere migliorato per ridurre la dimensione dei dati che sono stati scambiati tra le fasi. Ad esempio, Diciamo se è stato applicato un filtro su alcuni dati per un "evento x"’ dado, quindi nel risultante RDD, la colonna "evento" diventa ridondante poiché tecnicamente tutte le righe provengono dall'evento "x". Questa colonna potrebbe essere rimossa dai futuri RDD creati da questi dati filtrati per salvare ulteriori informazioni trasferite durante le operazioni di shuffle.

Token de almacenamiento

Mostra solo gli RDD che sono stati conservati, vale a dire, chi usa persiste () nasconditi (). Per renderlo più leggibile, puoi nominare l'RDD mentre lo memorizzi usando setName (). Solo gli RDD che si desidera conservare dovrebbero essere visualizzati nella scheda Archiviazione e potrebbero essere facilmente riconoscibili con i nomi personalizzati forniti.

Riepilogo

Questo articolo aiuta a fornire informazioni per identificare i problemi dell'interfaccia utente Web di Spark, come la dimensione dei dati che sono stati mescolati, il tempo di esecuzione delle fasi, Ricalcolo RDD a causa della mancanza di memorizzazione nella cache. Se si comprendono i suoi dati e la sua applicazione, quindi la distribuzione ideale dei dati e il numero desiderato di partizioni potrebbero essere misurati deducendo dall'interfaccia utente in esecuzione. Il sovraccarico di un nodo rispetto ad altri nel cluster è un'altra area di miglioramento che potrebbe essere vista in questa interfaccia utente. Il risoluzione de algunos de estos problemas se discute más en el Articolo sull'ottimizzazione delle prestazioni di Apache Spark.

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.