繁体   English   中英

在使用 JAR 运行 spark-submit 时,如何将程序参数传递给主函数?

[英]How do I pass program-argument to main function in running spark-submit with a JAR?

我知道这是一个微不足道的问题,但我在互联网上找不到答案。

我正在尝试使用带有程序参数( String[] args )的main函数运行 Java 类。

但是,当我使用spark-submit作业并像我一样传递程序参数时

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

它不读取arg

我尝试运行的命令是

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

这给

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

当我尝试时:

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

我得到

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)

我怎样才能传递这些论点? 它们在作业的每次运行中经常更改,并且需要作为参数传递。

在 .jar 文件之前传递的参数将是 JVM 的参数,而在 jar 文件之后传递的参数将传递给用户的程序。

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

在这里, s将等于someargument ,而-Xms -Xmx被传递到JVM。

public static void main(String[] args) {

    String s = args[0];
}

我从本教程中找到了正确的命令。

该命令应采用以下形式:

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

第一个无法识别的参数被视为主要资源(在我们的例子中是 jar 文件)。 结帐SparkSubmitArguments.handleUnknown

primaryResource 之后的所有参数都被视为应用程序的参数。 结帐SparkSubmitArguments.handleExtraArgs

为了更好地理解如何解析参数,请查看 SparkSubmitOptionParser.parse 上面2个方法是从这个方法调用的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM