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ßtdat-test.jar
- der Einstiegspunkt in
dat-test.jar
Klasse befindet mich an dem Paketpfadmy.package.path.Test
- Spark-Master bei
spark://master:7077
ist
, 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
Können Sie ihn mit einem kleinen Beispiel beginnen? – clearlight