Spark 3.5.0兼容的akka-actor-typed版本及类找不到错误排查
Spark部署报错
java.lang.NoClassDefFoundError: akka/actor/typed/ActorRef问题分析 错误原因
- 这个报错核心是运行时JVM找不到指定的Akka类,大概率是依赖冲突导致的:Spark集群本身内置了Akka依赖,如果你自己的项目引入了和Spark内置版本不一致的Akka(比如你用的2.8.5),就会触发类加载冲突,导致找不到目标类。
是否是版本不兼容
- 是的,Spark 3.5.0内置的Akka版本是2.6.20,你引入的2.8.5属于跨大版本更新,Akka 2.6到2.8的typed actor模块有不少API和内部结构改动,类路径、实现逻辑都有变化,直接混用必然出现类找不到的问题。
Spark 3.5.0适配的akka-actor-typed版本
- 必须和Spark内置版本严格对齐,也就是2.6.20。如果你的项目需要用到Akka typed功能,一定要确保依赖版本和Spark内置的一致,才能避免冲突。
解决建议
- 在项目构建文件(Maven pom.xml或Gradle build.gradle)中,将akka-actor-typed的版本指定为2.6.20,同时把Spark相关依赖以及Akka依赖设置为
providedscope(因为Spark集群已经包含这些依赖,无需打包到你的application.jar中)。 - Maven示例:
<dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor-typed_2.12</artifactId> <version>2.6.20</version> <scope>provided</scope> </dependency>
- 不建议强制覆盖Spark的Akka版本,这种操作可能引发更多兼容性问题,比如集群通信异常等。
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

