2016-03-16 11 views
7

So che questa è una domanda banale, ma non ho trovato la risposta su Internet.Come passare l'argomento del programma alla funzione principale nell'esecuzione di spark-submit con un JAR?

Sto cercando di eseguire una classe Java con la funzione main con gli argomenti del programma (String[] args).

Tuttavia, quando presento il processo utilizzando spark-submit e passare gli argomenti del programma come avrei fatto con

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

che non legge i arg s.

Il comando ho provato a fare funzionare era

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

e questo dà

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

e quando ho provato:

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

ottengo

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) 

Come posso passare questi argomenti? Cambiano frequentemente ad ogni esecuzione del lavoro e devono essere passati come argomenti.

+1

Si suppone che tu passi gli argomenti dopo il barattolo. Vedi la documentazione sull'invio delle applicazioni Spark: http://spark.apache.org/docs/latest/submitting-applications.html –

risposta

9

Argomenti passati prima il file .jar saranno argomenti alla JVM, dove sono argomenti dopo il file jar verrà trasmettere al programma degli utenti.

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

Qui, s sarà pari someargument, dove il -Xms -Xmx sono passati nella JVM.

public static void main(String[] args) { 

    String s = args[0]; 
} 
+0

sei sicuro? Sto usando la scintilla 1.6.2 sul filato e ottengo tutti gli argomenti includono ** - class class class ... ** Ottengo tutto –

3

Ho trovato il comando corretto da this tutorial.

Il comando deve essere della forma:

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