2015-07-12 9 views
5

RDD passa attraverso una serie di trasformazioni con funzioni/metodo definiti dall'utente in oggetto. E queste funzioni sono passate agli esecutori sotto forma di compiti. Queste attività sono istanze di una classe Scala definita in spark-core.In che modo il driver spark serializza l'attività che viene inviata agli executors?

Presumo che le funzioni/metodi definiti dall'utente siano racchiusi in un oggetto compito e passati agli esecutori.

  1. Come gli esecutori sanno che cosa è il metodo che deve essere eseguito che è avvolto nella classe compito?

  2. In che modo esattamente la serializzazione è utile qui?

  3. In che modo il contesto spark legge il codice utente e lo converte in attività?

risposta

0

Un po 'spiegare:

Come gli esecutori sanno che cosa è il metodo che deve essere eseguito, che è avvolto nella classe compito?

L'esecutore ricevono un msg RPC con una descrizione dell'attività, vedi sotto

Come esattamente è la serializzazione utile qui?

Sì, il compito contiene codice che viene serializzato da un closureSerializer

che modo il contesto scintilla leggere il codice utente e convertirlo in attività?

In un envirenment REPL, scintilla compilare il codice utente di file di classe e mettere su un file server, l'esecutore implementa un classloader personalizzato che caricare la classe dal file server sul lato del conducente; la classe è in realtà una funzione da eseguire contro un iteratore di record

3

La funzione di scorsa che passa fondamentalmente si basa su Java Serialization. In Java è possibile passare qualsiasi codice arbitrario ad un'altra macchina attraverso la rete, può essere semplice case class o qualsiasi classe con qualsiasi comportamento.

Un solo requisito: la classe serializzata deve essere nel percorso di classe della JVM di destinazione.

All'avvio quando si utilizza spark-submit distribuisce il file jar a tutti nodo operaio Spark, permette all'autista di passare funzioni serializzati al nodo dei lavoratori, e perché la classe serializzato è in percorso della classe qualsiasi funzione che ha inviato dal conducente può essere deserializzato.

Spark non definisce alcuna classe specifica Task per la trasformazione RDD. Se lo si utilizza da Scala per le operazioni map, si inviano versioni serializzate di scala Function1.

Se si utilizza la funzione di aggregazione/riduzione per chiave ecc, può essere Function2. Comunque, non è qualcosa di specifico per Spark, è semplicemente una classe di Scala (Java).

5

Per quanto riguarda Come il contesto spark legge il codice utente e lo converte in attività?

Il codice del driver genera lavoro, fasi e attività.

L'intero codice del driver può essere chiamato come un'unica applicazione e ogni azione costituisce un lavoro.

Quando un lavoro viene inviato al conducente, il lavoro viene diviso in piano logico e piano fisico.

Durante il piano logico le trasformazioni() creano il calcolo di una serie di RDD. Poiché ogni azione() attiva un lavoro, durante il piano fisico il grafico completo delle dipendenze delle trasformazioni viene diviso in fasi. A differenza di hadoop, in cui il processo di esecuzione è fisso map-shuffle-sort-aggregate, spark non ha un processo di esecuzione fisso. I dati vengono calcolati quando sono effettivamente necessari in modalità flusso. Parte dal risultato finale di RDD e controlla indietro la catena RDD per trovare quali RDD e parititoni sono necessari per calcolare il risultato finale. Durante il backtracking, se incontra ShuffleDependency, taglia il flusso di dati e forma una nuova fase lasciando le chaing di RDD di NarrowDepedency. Quindi è ShuffleDependency che esplode per una nuova fase.

All'interno di ogni fase le attività vengono eseguite e i dati vengono pipeline attraverso le trasformazioni. Il numero di attività è equivalente al numero del numero di partizioni negli RDD di ogni fase.

Tutte le attività sono impacchettate in TaskSet e inviate a TaskScheduler. L'attore Driver invia le attività serializzate a CoarseGrainedExecutorBackend Actor sul nodo di lavoro. Alla ricezione, l'esecutore lo deserializza in un'attività normale e viene eseguito per ottenere il risultato. A TaskScheduler verrà notificato che l'attività è stata completata e il suo risultato sarà elaborato

Se l'attività ricevuta sul driver è l'ultima attività nello stage, verrà inviata la fase successiva. Se il palco è già l'ultimo, dagScheduler verrà informato che il lavoro è finito.

Dalla versione spark 1.4, è stata aggiunta una nuova visualizzazione nell'interfaccia utente di Spark. Dove possiamo vedere la visualizzazione DAG di diverse fasi.

Problemi correlati