2016-06-03 5 views
0

Ich versuche, eine Anwendung zu meinem Funke-Cluster (Standalone-Modus) durch die Spark-Submit-Befehl senden. Ich verfolge die official spark documentation, sowie auf this other one verlassen. Jetzt ist das Problem, dass ich seltsame Verhaltensweisen bekomme. Mein Setup ist folgende:Spark-Submit im Bereitstellungsmodus Client liest nicht alle JARs

  • ich ein Verzeichnis, in dem alle Abhängigkeits Gläser für meine Anwendung befinden, das heißt /home/myuser/jars
  • Das Glas meiner Anwendung im selben Verzeichnis ist (/home/myuser/jars), und heißt dat-test.jar
  • der Einstiegspunkt in dat-test.jar Klasse befindet mich an dem Paketpfad my.package.path.Test
  • Spark-Master bei spark://master:7077 ist
Jetzt

, lege ich die Anwendung direkt auf dem Master-Knoten, wodurch die client deploy-Modus verwenden, Ausführen des Befehls

./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 /home/myuser/jars/*

und erhielt ich einen Fehler als

java.lang.ClassNotFoundException: my.package.path.Test

Wenn ich Aktivieren Sie den verbose Modus, was ich sehe ist, dass die primaryResource als Glas mit dem Einstiegspunkt ausgewählt ist das erste Glas in alphabetischer Reihenfolge in /home/myuser/jars/ (das ist nicht dat-test.jar), führend (ich suppose) zum ClassNotFoundException. Alle jars im selben Verzeichnis werden sowieso als Argumente geladen.

Natürlich, wenn ich laufen

./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 /home/myuser/jars/dat-test.jar

es findet die Test Klasse, aber es findet keine andere in anderen Gläsern enthaltenen Klassen. Schließlich, wenn ich die --jars Flag verwenden, und führen Sie

./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 --jars /home/myuser/jars/* /home/myuser/jars/dat-test.jar

erhalte ich das gleiche Ergebnis wie die erste Option. Das erste Gefäß in /home/myuser/jars/ wird geladen als primaryResource, was zu ClassNotFoundException für my.package.path.Test führt. Gleiches, wenn ich --jars /home/myuser/jars/*.jar hinzufüge.

Wichtige Punkte sind:

  • Ich will nicht viele mit allen Abhängigkeiten für die Entwicklung Gründen
  • Die Gläser in /home/myuser/jars/ sind ein einziges Glas haben. Ich würde gerne wissen, ob es eine Möglichkeit gibt, sie alle aufzunehmen, anstatt die Komma-getrennte Syntax
  • Wenn ich versuche, die gleichen Befehle mit --deploy-cluster auf dem Master-Knoten ausführen, bekomme ich nicht den Fehler, aber die Berechnung scheitert aus anderen Gründen (aber das ist ein anderes Problem).

Welches ist dann die richtige Art, eine Spark-Submit im Client-Modus auszuführen? Dank

Antwort

0

Es gibt keine Möglichkeit, alle Gläser mit der Option --jars einzuschließen, Sie müssen ein kleines Skript erstellen, um sie aufzuzählen. Dieser Teil ist ein bisschen suboptimal.

+0

Können Sie ihn mit einem kleinen Beispiel beginnen? – clearlight

Verwandte Themen