【发布时间】:2017-07-12 22:18:00
【问题描述】:
要将 Spark 应用程序提交到集群,他们的文档说明:
为此,请创建一个包含您的代码及其依赖项的程序集 jar(或“uber”jar)。 sbt 和 Maven 都有汇编插件。创建程序集 jar 时,将 Spark 和 Hadoop 列为提供的依赖项;这些不需要捆绑,因为它们是由集群管理器在运行时提供的。 -- http://spark.apache.org/docs/latest/submitting-applications.html
所以,我将 Apache Maven Shade 插件添加到我的 pom.xml 文件中。 (版本 3.0.0)
我把我的 Spark 依赖的范围变成了provided。 (2.1.0 版)
(我还添加了 Apache Maven 程序集插件,以确保在运行 mvn clean package 时将所有依赖项包装在 jar 中。我不确定它是否真的有必要。)
spark-submit 就是这样失败的。它会为我拥有的依赖项抛出 NoSuchMethodError(请注意,在 IntelliJ 中编译时,代码在本地实例中工作,假设已删除 provided)。
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;
引发错误的代码行无关紧要——它只是我的 main 方法中创建 Stopwatch 的第一行,它是 Google Guava 实用程序的一部分。 (21.0版)
其他在线解决方案表明它与 Guava 的版本冲突有关,但我对这些建议还没有任何运气。任何帮助将不胜感激,谢谢。
【问题讨论】:
标签: java guava nosuchmethoderror maven-shade-plugin spark-submit