使用 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]
我正在尝试使用 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]