scala - SBT with Spark-Core 3.0.1 Exception NoClassDefFound for org/apache/log4j/Logger
问题描述
我正在使用Log4j
with Scala 2.12.12
,Spark-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
将指示为错误源自的行。
解决方案
尝试在 EMR 6.2 上运行我的应用程序时,我遇到了类似的问题。
我在 qubole github 项目上发现了一条评论,声称 AWS 的 spark-core JAR 缺少 org/apache/spark/internal/Logging$class,但我无法验证这是否属实。
推荐阅读
- python - 读取泡菜文件时出现AttributeError
- angular - 正确的 npm 包将 ADAL 与 Angular 6 一起使用
- android - 从信标扫描和读取数据(EM Microelectronic:EMBC02)
- c# - 如何在没有'obj'文件夹的情况下运行c#项目
- pandas - 带有“ValueError:无法使用空键标记索引”的数据透视表
- javascript - python作为后端,HTML作为前端
- java - 子级的领域java链查询
- mysql - mysql计算查询耗时长???
- c# - 如何将设备加速转换为全局加速
- angular - Angular 5 主题
兄弟组件更新后未从服务获取最新更新数据