2015-08-05 4 views
6

Ich habe vor kurzem begonnen, Funken zu verwenden, und ich möchte Funke-Job von Spring-Webanwendung ausführen.Ausführen von Apache-Funke-Job von Spring Web-Anwendung mit Garn-Client oder einem anderen Weg

Ich habe eine Situation, in der ich Web-Anwendung in Tomcat-Server mit Spring-Boot.Meine Web-Anwendung erhält eine REST-Web-Service-Anfrage basierend darauf, dass es Funken Berechnung Job in Yarn-Cluster auslösen muss. Da mein Job länger dauern kann und auf Daten von HDFS zugreifen kann, möchte ich den Funke-Job im Garn-Cluster-Modus ausführen und ich möchte den Funke-Kontext in meiner Web-Schicht nicht am Leben erhalten. Ein weiterer Grund dafür ist, dass meine Anwendung mandantenfähig ist, so dass jeder Mieter seinen eigenen Job ausführen kann. Im Garn-Cluster-Modus kann also jeder Mieter seinen eigenen Treiber starten und in seinem eigenen Funke-Cluster laufen. In der Web-App-JVM gehe ich davon aus, dass ich in einer JVM keinen Mehrfachkonfliktkontext ausführen kann.

Ich mag Funken Jobs in Garn-Cluster-Modus von Java-Programm in der meiner Web-Anwendung auszulösen. Was ist der beste Weg, dies zu erreichen? Erforsche ich verschiedene Optionen und schauen, um Ihre Führung auf dem man am besten

1) I Funken einreichen Befehlszeilen-Shell verwenden können, um meine Jobs einreichen. Aber um es aus meiner Webanwendung auszulösen, muss ich entweder Java ProcessBuilder api oder ein Paket verwenden, das auf java ProcessBuilder basiert. Dies hat 2 Probleme. Zunächst klingt das nicht nach einer sauberen Methode. Ich sollte eine programmatische Art haben, meine Funkenanwendungen auszulösen. Das zweite Problem wird sein, dass ich die Fähigkeit verlieren werde, die eingereichte Anwendung zu überwachen und ihren Status zu bekommen. Nur eine rohe Methode ist das Lesen des Ausgabestroms der Spark-Submit-Shell, was wiederum nicht nach einem guten Ansatz klingt.

2) Ich habe versucht, Yarn Client mit dem Auftrag aus Feder Antrag einzureichen. Im Folgenden ist der Code, den ich verwende, um Funken Job mit Garn-Client einreichen:

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(); 

Aber wenn ich den obigen Code ausführen, versucht es nur auf localhost zu verbinden. Ich bekomme diesen Fehler:

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) 

Also ich glaube nicht, dass es eine Verbindung zur Remote-Maschine herstellen kann.

Bitte legen nahe, was ist beste Weg, dies von Funken mit der neuesten Version zu tun. Später habe ich vor, diese gesamte Anwendung in Amazon EMR zu implementieren. Also sollte Ansatz auch dort funktionieren.

Vielen Dank im Voraus

+0

Haben Sie Ihr Problem gelöst? – Tony

+0

Entschuldigung, ich arbeite nicht mehr daran. Also habe ich nicht versucht zu sehen, welche Lösung funktioniert. – Kristy

Antwort

0

Spark-Jobserver helfen können: https://github.com/spark-jobserver/spark-jobserver, diese Projektanfragen RESTful Web erhalten und einen Funken Job starten. Ergebnisse werden als JSON-Antwort zurückgegeben.

+0

Nur Link-Antworten werden hier dringend empfohlen, da die Links in Zukunft möglicherweise nicht mehr funktionieren.Ich schlage vor, dass Sie Ihre Antwort mit Zitaten aus den von Ihnen zitierten Quellen bearbeiten. –

0

Ich hatte auch ähnliche Probleme, Spark-App zu versuchen, die YARN-Cluster verbindet - keine Cluster-Konfiguration hatte versucht, eine Verbindung mit dem lokalen Rechner wie für den Hauptknoten des Clusters, die offensichtlich fehlgeschlagen.

Es funktionierte für mich, wenn ich core-site.xml und yarn-site.xml in den Klassenpfad (src/main/resources in typischer sbt- oder Maven-Projektstruktur) gestellt hatte - Anwendung korrekt mit dem Cluster verbunden.

Wenn Standort dieser Dateien durch HADOOP_CONF_DIR Umgebungsvariable wird in der Regel angegeben mit Funken einreichen, aber es stand-alone-Anwendung nicht wirken.