0

我正在尝试Apache Spark 2.2.1使用Scala 2.11. 我在我的 JAR 中包含了一些额外的依赖项,即Apache Commons CLI,并将它们全部打包到一个胖 JAR 中。但是,NoSuchMethodError当我提交我的 Spark 应用程序时,我得到了一个。我很确定这不是由于 Scala 版本的不一致,而是由于依赖关系有些奇怪。

命令很简单spark-submit myjar.jar [arguments]

这是错误:

线程“主”java.lang.NoSuchMethodError 中的异常:org.apache.commons.cli.Options.addRequiredOption(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Lorg/apache/commons/cli /选项; 在 xyz.plenglin.aurum.spark.RunOnSpark$.main(RunOnSpark.scala:46) 在 xyz.plenglin.aurum.spark.RunOnSpark.main(RunOnSpark.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache .spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:775) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.

运行java -jar myjar.jar [arguments]没有任何问题。窥视 JAR 内部,我知道org.apache.commons.cli.Options它应该在哪里。

4

1 回答 1

0

看起来我通过将--driver-class-path参数添加到我的spark-submit命令来修复它。

所以命令看起来像:

$ spark-submit --driver-class-path myjar.jar myjar.jar [arguments]
于 2018-02-05T07:10:03.580 回答