使用Java开发Spark-Cassandra程序时遭遇com.twitter.chill.KryoBase类缺失异常
解决Spark-Cassandra程序里
com.twitter.chill.KryoBase缺失的异常 嘿,我帮你捋捋这个问题:你碰到的java.lang.NoClassDefFoundError: com/twitter/chill/KryoBase,根源就是项目里缺了twitter-chill这个依赖库——它是Spark用来做Kryo序列化的核心组件之一。从你贴的pom.xml片段来看,应该是用dse-spark-dependencies的时候,不小心把这个依赖给排除掉了,或者依赖传递出了问题。
下面给你几个可行的解决办法:
办法1:检查并修正依赖排除规则
如果你之前对dse-spark-dependencies做了排除配置,先看看是不是误删了com.twitter.chill相关的依赖。把不必要的排除项删掉,让依赖能正常传递:
<dependency> <groupId>com.datastax.dse</groupId> <artifactId>dse-spark-dependencies</artifactId> <version>5.1.1</version> <!-- 移除那些可能导致twitter-chill被排除的配置项 --> </dependency>
办法2:手动补上twitter-chill依赖
如果必须保留某些排除,或者dse-spark-dependencies没自动带出这个依赖,那就手动加进去:
<dependency> <groupId>com.twitter</groupId> <artifactId>chill-core</artifactId> <!-- 注意版本要和你的DSE/Spark兼容,DSE 5.1.1对应的chill版本大概是0.8.0,你可以根据实际情况调整 --> <version>0.8.0</version> <scope>compile</scope> </dependency>
办法3:确认Spark版本兼容性
别忘了检查Spark和DSE依赖的版本是否匹配:DSE 5.1.1对应的Spark版本是2.0.x,如果你用了其他版本的Spark,很可能会出现依赖冲突,导致twitter-chill加载失败。
最后再提两个小细节:
- 要是用
maven-shade-plugin打包,得确保插件没把twitter-chill的类给漏掉; - 看看有没有其他第三方依赖全局排除了
com.twitter.chill相关包,有的话得针对性调整。
内容的提问来源于stack exchange,提问作者Mehul Gupta
相关产品推荐
相关产品推荐

