2014-09-14 10 views
42

Il Spark research paper ha prescritto un nuovo modello di programmazione distribuito rispetto al classico Hadoop MapReduce, rivendicando la semplificazione e l'enorme aumento delle prestazioni in molti casi, specialmente in Machine Learning. Tuttavia, il materiale per scoprire lo internal mechanics su Resilient Distributed Datasets con Directed Acyclic Graph sembra carente in questo documento.Come funziona DAG sotto le copertine in RDD?

Dovrebbe essere meglio imparato studiando il codice sorgente?

risposta

97

Anche io ho cercato sul Web di scoprire come la scintilla calcola il DAG dall'RDD e successivamente esegue l'operazione.

Al livello alto, quando viene eseguita un'azione sull'RDD, Spark crea il DAG e lo invia all'utilità di pianificazione DAG.

  • Lo scheduler DAG divide gli operatori in fasi di attività. Una fase è composta da attività basate su partizioni dei dati di input. Lo scheduler DAG convoglia gli operatori insieme. Ad es. Molti operatori di mappe possono essere programmati in un'unica fase. Il risultato finale di un programmatore DAG è un insieme di fasi.

  • Le fasi vengono passate all'utilità di pianificazione. L'utilità di pianificazione avvia le attività tramite gestore cluster (Spark Standalone/Yarn/Mesos). L'utilità di pianificazione non conosce le dipendenze delle fasi.

  • Il lavoratore esegue i compiti sullo slave.

Veniamo a come Spark costruisce il DAG.

A livello alto, sono disponibili due trasformazioni sugli RDD, ovvero trasformazione stretta e ampia trasformazione. Le ampie trasformazioni determinano fondamentalmente i confini del palcoscenico.

trasformazione stretta - non richiede che i dati vengano mescolati nelle partizioni. per esempio, Map, filtro ecc ..

vasta trasformazione - richiede i dati per essere mescolate ad esempio, reduceByKey ecc ..

Prendiamo un esempio di contare quanti messaggi di log appaiono ad ogni livello gravità,

segue è il file di log che inizia con il livello di gravità,

INFO I'm Info message 
WARN I'm a Warn message 
INFO I'm another Info message 

e creare il seguente codice Scala per estrarre lo stesso,

Questa sequenza di comandi definisce implicitamente un DAG di oggetti RDD (linea RDD) che verrà utilizzato in seguito quando viene chiamata un'azione. Ogni RDD mantiene un puntatore a uno o più genitori insieme ai metadati sul tipo di relazione che ha con il genitore. Ad esempio, quando chiamiamo val b = a.map() su un RDD, l'RDD b conserva un riferimento al suo genitore a, che è un lignaggio.

Per visualizzare la discendenza di un RDD, Spark fornisce un metodo di debug toDebugString().Per esempio l'esecuzione toDebugString() sul splitedLines RDD, verrà generato il valore seguente:

(2) ShuffledRDD[6] at reduceByKey at <console>:25 [] 
    +-(2) MapPartitionsRDD[5] at map at <console>:24 [] 
    | MapPartitionsRDD[4] at map at <console>:23 [] 
    | log.txt MapPartitionsRDD[1] at textFile at <console>:21 [] 
    | log.txt HadoopRDD[0] at textFile at <console>:21 [] 

La prima linea (dal basso) mostra la RDD ingresso. Abbiamo creato questo RDD chiamando lo sc.textFile(). Di seguito è riportata la vista più schematica del grafico del DAG creato dal RDD specificato.

RDD DAG graph

Una volta che il DAG è costruire, lo scheduler Spark crea un piano di esecuzione fisica. Come accennato in precedenza, lo scheduler DAG suddivide il grafico in più fasi, le fasi vengono create in base alle trasformazioni. Le strette trasformazioni saranno raggruppate (condotte a tubo) insieme in un'unica fase. Così, per il nostro esempio, Spark creerà due fasi di esecuzione come segue:

Stages

Lo scheduler DAG sarà quindi inviare le tappe nella task scheduler. Il numero di attività inviate dipende dal numero di partizioni presenti nel file di testo. L'esempio di Fox considera che abbiamo 4 partizioni in questo esempio, quindi ci saranno 4 serie di compiti creati e presentati in parallelo a condizione che ci siano abbastanza schiavi/core. Sotto diagramma illustra più in dettaglio:

Task execustion

Per informazioni più dettagliate vi suggerisco di passare attraverso i seguenti video di YouTube in cui i creatori Spark danno in Details fondo il DAG e piano di esecuzione e la durata.

  1. Advanced Apache Spark- Sameer Farooqui (Databricks)
  2. A Deeper Understanding of Spark Internals - Aaron Davidson (Databricks)
  3. Introduction to AmpLab Spark Internals
3

Beginning Spark 1.4 visualizzazione dei dati è stato aggiunto attraverso i seguenti tre componenti dove anche fornire una chiara rappresentazione grafica DAG.

  • vista Timeline degli eventi Spark

  • esecuzione DAG

  • visualizzazione di Spark statistiche Streaming

riferimento a link per ulteriori informazioni.

Problemi correlati