2015-08-05 11 views
6

Ho recentemente iniziato a utilizzare spark e voglio eseguire il lavoro spark dall'applicazione web Spring.Esecuzione di un lavoro spark di Apache dall'applicazione Spring Web utilizzando il client Yarn o qualsiasi altro modo alternativo

Ho una situazione in cui eseguo l'applicazione Web nel server Tomcat utilizzando l'avvio di Spring. La mia applicazione Web riceve una richiesta di servizio Web REST in base alla quale è necessario attivare il lavoro di calcolo spark nel cluster Yarn. Poiché il mio lavoro può richiedere più tempo per essere eseguito e accedere ai dati da HDFS, quindi voglio eseguire il processo spark in modalità cluster-thread e non voglio mantenere vivo il contesto spark nel mio livello web. Un altro motivo per questo è che la mia applicazione è multi tenant in modo che ogni titolare possa eseguire il proprio lavoro, quindi in modalità filato-cluster ogni lavoro del titolare può avviare il proprio driver ed eseguire il proprio cluster spark. Nella JVM dell'app Web, presumo di non poter eseguire più contesti spark in una JVM.

Desidero attivare i lavori spark in modalità thread-cluster dal programma java nella mia applicazione web. qual è il modo migliore per raggiungere questo obiettivo. Sto esplorando varie opzioni e osservando le tue indicazioni su quale sia il migliore

1) Posso usare la shell della riga di comando spark-submit per inviare i miei lavori. Ma per attivarlo dalla mia applicazione web ho bisogno di usare Java ProcessBuilder api o qualche pacchetto costruito su ProcessBuilder java. Questo ha 2 problemi. Innanzitutto non sembra un modo pulito per farlo. Dovrei avere un modo programmato per attivare le mie applicazioni di scintilla. Il secondo problema sarà che perderò la capacità di monitorare l'applicazione inviata e ottenere il suo stato. Solo un modo rozzo per farlo è leggere il flusso di output della shell di invio di scintille, che ancora non sembra un buon approccio.

2) Ho provato a utilizzare il client Yarn per inviare il lavoro dall'applicazione Spring. Di seguito è riportato il codice che uso per inviare lavoro scintilla utilizzando filato Cliente:

Configuration config = new Configuration(); 
System.setProperty("SPARK_YARN_MODE", "true");   
SparkConf conf = new SparkConf(); 
ClientArguments cArgs = new ClientArguments(sparkArgs, conf); 
Client client = new Client(cArgs, config, conf); 
client.run(); 

Ma quando si esegue il codice di cui sopra, si tenta di connettersi solo su localhost. Ottengo questo errore:

5/08/05 14:06:10 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS) 15/08/05 14:06:12 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS) 

Quindi io non credo che sia in grado di connettersi al computer remoto.

Si prega di suggerire, qual è il modo migliore per farlo con l'ultima versione di scintilla. Più tardi ho intenzione di distribuire questa intera applicazione in Amazon EMR. Quindi l'approccio dovrebbe funzionare anche lì.

Grazie in anticipo

+0

Hai risolto il problema? – Tony

+0

Mi spiace, non ci sto più lavorando. Quindi non ho provato a vedere quale soluzione funziona. – Kristy

risposta

0

Spark JobServer potrebbe aiutare: https://github.com/spark-jobserver/spark-jobserver, questo progetto riceve richieste web RESTful e avviare un lavoro scintilla. I risultati vengono restituiti come risposta JSON.

+0

Qui le risposte di solo collegamento sono altamente sconsigliate perché i collegamenti potrebbero diventare morti in futuro.Ti suggerisco di modificare la tua risposta con le citazioni delle fonti che citi. –

0

Avevo anche problemi simili nel tentativo di eseguire l'app Spark che si connette al cluster YARN - non avendo configurazione del cluster stava tentando di connettersi al computer locale come per il nodo principale del cluster, che ovviamente non funzionava.

Ha funzionato per me quando ho inserito core-site.xml e yarn-site.xml nel classpath (src/main/resources nella tipica struttura di progetto sbt o Maven): l'applicazione è correttamente connessa al cluster.

Quando si utilizza la posizione spark-submit di tali file viene in genere specificato dalla variabile di ambiente HADOOP_CONF_DIR, ma per l'applicazione autonoma non ha avuto alcun effetto.

Problemi correlati