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 arg
s.
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.
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];
}
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
spark-submit --class SparkWordCount --master yarn --jars <jar1.jar>,<jar2.jar>
sparkwordcount-1.0.jar /user/user01/input/alice.txt /user/user01/output