要将 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 Assembly Plugin 以确保我在运行时将所有依赖项包装在 jar 中mvn clean package
。我不确定它是否真的有必要。)
就这样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 的版本冲突有关,但我对这些建议还没有任何运气。任何帮助将不胜感激,谢谢。