使用 spark-submit 时来自依赖项的 NoSuchMethodError

NoSuchMethodError from dependencies when using spark-submit

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

命令就是spark-submit myjar.jar [arguments]

这是错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.addRequiredOption(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/ String;)Lorg/apache/commons/cli/Options; at xyz.plenglin.aurum.spark.RunOnSpark$.main(RunOnSpark.scala:46) at xyz.plenglin.aurum.spark.RunOnSpark.main(RunOnSpark.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 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) at org.apache.spark.deploy.SparkSubmit$.doRunMain(SparkSubmit.scala:180) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

运行 java -jar myjar.jar [arguments] 没有任何问题。窥视 JAR 内部,我看到 org.apache.commons.cli.Options 它应该在的位置。

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

所以命令看起来像:

$ spark-submit --driver-class-path myjar.jar myjar.jar [arguments]