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
Hai risolto il problema? – Tony
Mi spiace, non ci sto più lavorando. Quindi non ho provato a vedere quale soluzione funziona. – Kristy