Cassandra重启报错 java.lang.ClassCastException

本文详细描述了使用Cassandra 1.1.1版本创建表格并插入数据后,重启服务时遇到的Java.lang.ClassCastException错误。原因在于Cassandra的一个已知bug,解决方法是删除saved_caches_directory文件夹中的文件,并重启服务即可恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过CQL创建了若干表格,比如:

CREATE TABLE fileindex(
recid varchar,
agentno varchar,
customerno varchar,
recfile varchar,
createtime varchar,
PRIMARY KEY(recid)
);

CREATE INDEX ON fileindex(agentno);
CREATE INDEX ON fileindex(customerno);
CREATE INDEX ON fileindex(recfile);
CREATE INDEX ON fileindex(createtime);

 然后再表中插入若干数据,运行了一段时间后,重启Cassandra,报了下面的错:

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.nio.ByteBuffer
at org.apache.cassandra.db.marshal.UTF8Type.compare(UTF8Type.java:27)
at org.apache.cassandra.dht.LocalToken.compareTo(LocalToken.java:45)
at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:89)
at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:38)
at java.util.TreeMap.getEntry(TreeMap.java:328)
at java.util.TreeMap.containsKey(TreeMap.java:209)
at java.util.TreeSet.contains(TreeSet.java:217)
at org.apache.cassandra.io.sstable.SSTableReader.load(SSTableReader.java:396)
at org.apache.cassandra.io.sstable.SSTableReader.open(SSTableReader.java:187)
at org.apache.cassandra.io.sstable.SSTableReader$1.run(SSTableReader.java:225)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.nio.ByteBuffer
at org.apache.cassandra.db.marshal.UTF8Type.compare(UTF8Type.java:27)
at org.apache.cassandra.dht.LocalToken.compareTo(LocalToken.java:45)
at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:89)
at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:38)

  

找了半天,终于找到答案,原来是Cassandra1.1.1的一个bug(将在Cassandra1.1.2中修复)。

https://issues.apache.org/jira/browse/CASSANDRA-4331

 

解决方法就是删除saved_caches_directory文件夹中的文件,默认位置是/var/lib/cassandra/saved_caches

 

然后再重启就没问题了

025-07-03T15:46:22.723543009+08:00 stdout F 07:46:22.723 [main] ERROR org.apache.cassandra.io.util.FileUtils - FATAL: Cassandra is unable to access required classes. This usually means it has been run without the aid of the standard startup scripts or the scripts have been edited. If this was intentional, and you are attempting to use Java 11+ you may need to add the --add-exports and --add-opens jvm options from either jvm11-server.options or jvm11-client.options 2025-07-03T15:46:22.723543009+08:00 stdout F java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.723939593+08:00 stdout P Exception (java.lang.ExceptionInInitializerError) encountered during startup: null 2025-07-03T15:46:22.723979395+08:00 stdout F 2025-07-03T15:46:22.724179420+08:00 stderr P java.lang.ExceptionInInitializerError 2025-07-03T15:46:22.724190507+08:00 stderr F 2025-07-03T15:46:22.724269667+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.724321597+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.724342025+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.724364118+08:00 stderr F 2025-07-03T15:46:22.724449226+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.724462413+08:00 stderr F 2025-07-03T15:46:22.724507351+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.724533838+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.724547333+08:00 stderr F 2025-07-03T15:46:22.724567912+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.724577419+08:00 stderr F 2025-07-03T15:46:22.724596102+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.724605534+08:00 stderr F 2025-07-03T15:46:22.724743010+08:00 stderr P Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.724759623+08:00 stderr F 2025-07-03T15:46:22.724796764+08:00 stderr P at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T15:46:22.724831605+08:00 stderr F 2025-07-03T15:46:22.724842297+08:00 stderr P ... 8 more 2025-07-03T15:46:22.724852948+08:00 stderr F 2025-07-03T15:46:22.724917495+08:00 stderr P Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.724928367+08:00 stderr F 2025-07-03T15:46:22.724962497+08:00 stderr P at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.724973277+08:00 stderr F 2025-07-03T15:46:22.724992712+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.725002117+08:00 stderr F 2025-07-03T15:46:22.725046030+08:00 stderr F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.725081741+08:00 stderr F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.725125434+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.725136176+08:00 stderr F 2025-07-03T15:46:22.725147506+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.725158852+08:00 stderr F 2025-07-03T15:46:22.725192482+08:00 stderr F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.725214073+08:00 stderr P ... 8 more 2025-07-03T15:46:22.725233470+08:00 stderr F 2025-07-03T15:46:22.725767279+08:00 stdout F 07:46:22.725 [main] ERROR org.apache.cassandra.service.CassandraDaemon - Exception encountered during startup 2025-07-03T15:46:22.725767279+08:00 stdout F java.lang.ExceptionInInitializerError: null 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.725767279+08:00 stdout F Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T15:46:22.725767279+08:00 stdout F ... 8 common frames omitted 2025-07-03T15:46:22.725767279+08:00 stdout F Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.725767279+08:00 stdout F ... 8 common frames omitted这个是什么报错启动命令是podman run -d \ --name cassandra \ --network janusgraph-net \ --privileged \ -p 9042:9042 \ -v /opt/janusgraph/conf/cassandra:/etc/cassandra:z \ -v /home/iaas/janusgraph-full-0.6.3/cassandra/lib:/usr/share/cassandra/lib:z \ -e CASSANDRA_CONF=/etc/cassandra \ -e CLASSPATH=/usr/share/cassandra/lib/* \ -e CASSANDRA_AUTHENTICATOR=PasswordAuthenticator \ -e CASSANDRA_USER=cassandra \ -e CASSANDRA_CLUSTER_NAME=JanusGraphCluster \ -e JVM_EXTRA_OPTS="--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED" \ docker.io/library/cassandra:4.0这个jdk是11请问
最新发布
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值