【问题标题】:Error executing Maven jar file containing SparkSession builder执行包含 SparkSession 构建器的 Maven jar 文件时出错
【发布时间】:2018-11-09 01:31:05
【问题描述】:

我目前正在开发一个项目,其中包括适用于 Scala、MongoDB 和 Maven 的 Spark API。

我们使用的版本如下:

火花:2.2.0

斯卡拉:2.11.8

Maven:3.5.3

MongoDB:3.6.3

用于 Spark 的 MongoDB 连接器:2.2.0

jar 的主类包含以下代码行:

val spark = SparkSession.builder().master("local[*]").getOrCreate()

这是我尝试运行 main 时的错误:

使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties 18/05/30 10:04:26 信息 SparkContext:运行 Spark 版本 2.2.0 线程“主”java.lang.NoSuchMethodError 中的异常:com.google.common.cache。 CacheBuilder.refreshAfterWrite(JLjava/util/concurrent/TimeUnit;)Lcom/google/comm 在/缓存/CacheBuilder; 在 org.apache.hadoop.security.Groups.(Groups.java:96) 在 org.apache.hadoop.security.Groups.(Groups.java:73) 在 org.apache.hadoop.security.Groups.getUserToGroupsMappingService(组 s.java:293) 在 org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupI 信息.java:283) 在 org.apache.hadoop.security.UserGroupInformation.ensureInitialized(使用 rGroupInformation.java:260) 在 org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject( 用户组信息.java:789) 在 org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGrou pInformation.java:774) 在 org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGr oupInformation.java:647) 在 org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils .scala:2430) 在 org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils .scala:2430) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2430) 在 org.apache.spark.SparkContext.(SparkContext.scala:295) 在 org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509) 在 org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSessi on.scala:909) 在 org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSessi on.scala:901) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.sc 阿拉:901) 在 fr.atos.gsec.Main$.main(Main.scala:12) 在 fr.atos.gsec.Main.main(Main.scala)`

错误是由getOrCreate()方法触发的。

当我直接在 IntelliJ 上运行这个 main 时,它可以正常工作并启动 Spark,没有任何问题。

非常感谢您的帮助

【问题讨论】:

    标签: scala maven apache-spark jar


    【解决方案1】:

    您需要将库包含到导出的 jar 中。默认情况下,它们不包含在导出的 Jar 中,因为 IDE 假定它们在运行时存在,但实际上它们并不存在。否则,可能是your classpath contains two or more versions of guava. 确保您的应用程序只有一个guava binary available

    【讨论】:

    • 感谢您的回答。我使用 Maven 程序集插件将依赖项包含在 jar 中。我试图从 pom.xml 中的 spark-core 依赖项中排除番石榴,但它仍然无法正常工作。
    • 你能打印依赖树吗?借助tree,你就能知道guava的依赖来了多少次了。
    • 我打印了依赖树,guava 依赖出现了两次:org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.22.2:compile 和 org.sonatype.sisu:sisu -guava:jar:0.9.9:compile,即使我将排除项放在 pom 中的相应依赖项中..
    • 您必须检查一次并从那里正确排除依赖项,而不是从 spark-core 中排除。它对我有用,我希望在那之后您将能够运行您的应用程序。
    • 感谢您的帮助,我们终于成功了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多