首页 > 解决方案 > SBT with Spark-Core 3.0.1 Exception NoClassDefFound for org/apache/log4j/Logger

问题描述

我正在使用Log4jwith Scala 2.12.12Spark-Core 3.0.1但是当我将库依赖项更改为不在 fat jar 中打包 spark-core 时,当我尝试运行它时出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at com.some.package.name.Utils$.setup(Utils.scala:207)
    at com.some.package.name.Main$.main(Main.scala:9)
    at com.some.package.name.Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 3 more

编译成功,如果我provided从依赖行中删除该子句,一切正常。我build.sbt的如下:

scalaVersion := "2.12.12"

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "3.0.1" % "provided",
"org.apache.logging.log4j" % "log4j-api" % "2.13.3",
"org.apache.logging.log4j" % "log4j-core" % "2.13.3",
"org.scalatest" %% "scalatest" % "3.2.0" % "test",
"com.holdenkarau" %% "spark-testing-base" % "3.0.1_1.0.0" % Test)

如果我删除写入记录器的代码,则设置SparkContext将指示为错误源自的行。

标签: scalaapache-sparkintellij-ideasbtlog4j

解决方案


尝试在 EMR 6.2 上运行我的应用程序时,我遇到了类似的问题。

在 qubole github 项目上发现了一条评论,声称 AWS 的 spark-core JAR 缺少 org/apache/spark/internal/Logging$class,但我无法验证这是否属实。


推荐阅读