2016-03-16 7 views
7

Ich weiß, dass das eine triviale Frage ist, aber ich konnte die Antwort nicht im Internet finden.Wie übergebe ich Programm-Argument an die Hauptfunktion beim Ausführen von Spark-Submit mit einem JAR?

Ich versuche, eine Java-Klasse mit der main-Funktion mit Programmargumenten (String[] args) auszuführen.

Allerdings, wenn ich den Job mit spark-submit und übergeben Programm Argumente vorbringen, wie ich mit

java -cp <some jar>.jar <Some class name> <arg1> <arg2> 

zu tun wäre es nicht die arg s liest.

Der Befehl, den ich laufen versucht war

bin/spark-submit analytics-package.jar --class full.package.name.ClassName 1234 someargument someArgument 

und das gibt

Error: No main class set in JAR; please specify one with --class 

und als ich versuchte:

bin/spark-submit --class full.package.name.ClassName 1234 someargument someArgument analytics-package.jar 

I

bekommen
Warning: Local jar /mnt/disk1/spark/1 does not exist, skipping. 
java.lang.ClassNotFoundException: com.relcy.analytics.query.QueryAnalytics 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.apache.spark.util.Utils$.classForName(Utils.scala:176) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:693) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:183) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:208) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:122) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

Wie kann ich diese Argumente übergeben? Sie ändern sich bei jedem Joblauf häufig und müssen als Argumente übergeben werden.

+1

Sie sollen die Argumente nach dem Glas übergeben. Siehe die Dokumentation zum Einreichen von Spark-Anwendungen: http://spark.apache.org/docs/latest/submitting-applications.html –

Antwort

9

Argumente übergeben vor die .jar-Datei wird Argumente für die JVM, wo sind Argumente nach die JAR-Datei an die weitergeben wird Benutzerprogramm.

bin/spark-submit --class classname -Xms256m -Xmx1g something.jar someargument 

Hier s wird gleich someargument, wo die -Xms -Xmx in die JVM übergeben werden.

public static void main(String[] args) { 

    String s = args[0]; 
} 
+0

Sind Sie sich sicher? Ich benutze Spark 1.6.2 auf Garn und ich bekomme alle Argumente einschließlich ** - Klasse Klassenname ... ** Ich bekomme alles –

3

Ich fand den richtigen Befehl von this tutorial.

Der Befehl sollte die folgende Form haben:

bin/spark-submit --class full.package.name.ClassName analytics-package.jar someargument someArgument 
Verwandte Themen