web-dev-qa-db-fra.com

Comment passer l'argument programme à la fonction principale lors de l'exécution de spark-submit avec un JAR?

Je sais que c'est une question banale, mais je n'ai pas pu trouver la réponse sur Internet.

J'essaie d'exécuter une classe Java avec la fonction main avec des arguments de programme (String[] args).

Cependant, lorsque je soumets le travail à l'aide de spark-submit et passer les arguments du programme comme je le ferais avec

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

il ne lit pas les args.

La commande que j'ai essayée était

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

et cela donne

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

et quand j'ai essayé:

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

Je reçois

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)

Comment puis-je transmettre ces arguments? Ils changent fréquemment à chaque exécution du travail et doivent être passés en arguments.

17
Eric Na

Arguments passés avant le fichier .jar sera des arguments à la JVM, où comme arguments passés après le fichier jar sera transmis au programme de l'utilisateur.

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

Ici, s sera égal à someargument, tandis que -Xms -Xmx est passé dans la JVM.

public static void main(String[] args) {

    String s = args[0];
}
26
Matt Clark

J'ai trouvé la commande correcte de ce tutoriel .

La commande doit être de la forme:

bin/spark-submit --class full.package.name.ClassName analytics-package.jar someargument someArgument
8
Eric Na
spark-submit --class SparkWordCount --master yarn --jars <jar1.jar>,<jar2.jar>
sparkwordcount-1.0.jar /user/user01/input/alice.txt /user/user01/output
1
Sushruth