2015-11-24 13 views
6

Suppongo di non aver ancora compreso appieno come funzioni Spark.Apache Spark: il driver (anziché solo gli Executor) tenta di connettersi a Cassandra

Qui è la mia messa a punto:

sto correndo un cluster Spark in modalità autonoma. Sto usando 4 macchine per questo: Uno è il Maestro, gli altri tre sono Lavoratori.

Ho scritto un'applicazione che legge i dati da un cluster Cassandra (vedere https://github.com/journeymonitor/analyze/blob/master/spark/src/main/scala/SparkApp.scala#L118).

Il cluster Cassandra a 3 nodi viene eseguito sugli stessi computer che ospitano anche i nodi Spark Worker. Il nodo Spark Maestro non viene eseguito un nodo Cassandra:

Machine 1  Machine 2  Machine 3  Machine 4 
Spark Master Spark Worker  Spark Worker  Spark Worker 
       Cassandra node Cassandra node Cassandra node 

Il ragionamento dietro questo è che io voglio per ottimizzare la località dei dati - quando si esegue il mio app Spark sul cluster, ogni lavoratore ha solo bisogno di parlare con la sua Cassandra locale nodo.

Ora, al momento della presentazione il mio Spark applicazione al cluster eseguendo spark-submit --deploy-mode client --master spark://machine-1 da macchina 1 (Spark Master), mi aspetto che il seguente:

  • un'istanza driver viene avviato sul Spark Maestro
  • la autista inizia un esecutore su ogni lavoratore Spark
  • del driver distribuisce la mia domanda di ciascun esecutore
  • mia applicazione funziona su ogni esecutore, e da lì, parla con Cassandra via 127.0.0.1:9042

Tuttavia, questo non sembra essere il caso. Invece, lo Spark Master prova a parlare con Cassandra (e fallisce, perché non c'è nessun nodo Cassandra nell'host della Macchina 1).

Che cosa ho frainteso? Funziona diversamente? L'autista infatti legge i dati di Cassandra e distribuisce i dati agli Executor? Ma poi non potrei mai leggere i dati più grandi di memory of Machine 1, anche se la memoria totale del mio cluster è sufficiente.

Oppure, l'autista comunica a Cassandra di non leggere i dati, ma di scoprire come suddividere i dati e istruisce gli esecutori a leggere la "loro" parte dei dati?

Se qualcuno può illuminarmi, sarebbe molto apprezzato.

risposta

6

Il programma del driver è responsabile della creazione di SparkContext, SQLContext e delle attività di pianificazione sui nodi worker. Include la creazione di piani logici e fisici e l'applicazione di ottimizzazioni. Per essere in grado di farlo deve avere accesso allo schema di origine dei dati e possibili altre informazioni come schema o statistiche diverse. I dettagli di implementazione variano da sorgente a fonte, ma in generale significa che i dati devono essere accessibili su tutti i nodi, incluso il master dell'applicazione.

Alla fine della giornata le vostre aspettative sono quasi corrette. Chunk dei dati vengono recuperati individualmente su ogni lavoratore senza passare attraverso il programma del driver, ma il driver deve essere in grado di connettersi a Cassandra per recuperare i metadati richiesti.

+2

In questo caso sono i metadati relativi all'intervallo di token e come è diviso tra i nodi +1 – RussS

Problemi correlati