web-dev-qa-db-ja.com

JARを使用してspark-submitを実行する際に、プログラム引数をmain関数に渡すにはどうすればよいですか?

これは些細な質問であることは知っていますが、インターネットで答えを見つけることができませんでした。

プログラム引数(String[] args)でmain関数を使用してJavaクラスを実行しようとしています。

ただし、spark-submitを使用してジョブを送信し、プログラムの引数を渡すと、

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

argsは読み取りません。

実行しようとしたコマンドは

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)

これらの引数を渡すにはどうすればよいですか?これらはジョブの実行ごとに頻繁に変更され、引数として渡す必要があります。

17
Eric Na

渡される引数before .jarファイルはJVMへの引数になり、引数として渡されるafter jarファイルはユーザーのプログラムに渡されます。

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

ここで、ssomeargumentと等しくなりますが、-Xms -XmxはJVMに渡されます。

public static void main(String[] args) {

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

このチュートリアル から正しいコマンドを見つけました。

コマンドの形式は次のとおりです。

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