为什么spark-submit因“IllegalArgumentException:缺少应用程序资源而失败”而失败?

时间:2017-12-07 11:04:45

标签: apache-spark

当我创建我的Spark应用程序的jar并尝试使用spark-submit运行它时,我收到以下错误。

这是我以前运行的命令。

spark-submit --executor-memory 1g --jars s3://test-data-lab-users/spachari/test/test_2.10-1.0.jar

这是我得到的错误。这是否意味着我没有在我的spark-submit中传递正确的参数?

Exception in thread "main" java.lang.IllegalArgumentException: Missing application resource.
    at org.apache.spark.launcher.CommandBuilderUtils.checkArgument(CommandBuilderUtils.java:241)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitArgs(SparkSubmitCommandBuilder.java:160)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitCommand(SparkSubmitCommandBuilder.java:276)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildCommand(SparkSubmitCommandBuilder.java:151)
    at org.apache.spark.launcher.Main.main(Main.java:86)
Command exiting with ret '1'

2 个答案:

答案 0 :(得分:11)

tl; dr 删除--jars选项并重新开始。

  

java.lang.IllegalArgumentException:缺少应用程序资源。

你错过了......嗯......该消息称为“应用程序资源”的Spark应用程序。

执行spark-submit并查看不同的命令行选项及其含义时,这一点更为明显。

./bin/spark-submit
Usage: spark-submit [options] <app jar | python file | R file> [app arguments]

那部分<app jar | python file | R file>是你错过的。

要重现您的问题,您只需使用spark-submit选项执行--jars,而无需指定Spark应用程序的主jar或类。

$ ./bin/spark-submit --jars target/spark-parent_2.11-2.3.0-SNAPSHOT-tests.jar
Exception in thread "main" java.lang.IllegalArgumentException: Missing application resource.
    at org.apache.spark.launcher.CommandBuilderUtils.checkArgument(CommandBuilderUtils.java:241)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitArgs(SparkSubmitCommandBuilder.java:160)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildSparkSubmitCommand(SparkSubmitCommandBuilder.java:274)
    at org.apache.spark.launcher.SparkSubmitCommandBuilder.buildCommand(SparkSubmitCommandBuilder.java:151)
    at org.apache.spark.launcher.Main.main(Main.java:86)

引用spark-submit --help--jars是......

  

- jars JARS 包含在驱动程序和执行程序类路径中的以逗号分隔的jar列表。

当Spark应用程序依赖于其他jar文件(也称为依赖项)时,

--jars非常有用,即mysql-connect.jar您不能(或者很可能不想)“汇编”到您的文件超级罐。

答案 1 :(得分:1)

当您必须向应用程序jar提供支持jar时,会添加

--jars选项。

缺少应用程序资源意味着您通过--jars选项传递它时,主jar丢失了。它正在寻找您的主jar,因为找不到它,所以会抛出该错误。