You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Cassandra sstablesplit时报错“Unknown Keyspace”的问题

Cassandra sstablesplit 报错:Unknown keyspace public

问题场景

停止Cassandra Pod后,将其data目录通过hostPath挂载到另一个同镜像的Pod中,执行以下命令时出错:

root@cas-sleep-pod:/data/cassandra/public# /opt/cassandra/tools/bin/sstablesplit -s 30720 --no-snapshot /data/cassandra/public/timebucket_auditlog_primary-b275e92070a511eda32ced63d2298aec/me-1172-big-Data.db

错误日志

WARN  12:43:44,036 Only 14.359GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots
Exception in thread "main" java.lang.AssertionError: Unknown keyspace public
        at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:316)
        at org.apache.cassandra.db.Keyspace.open(Keyspace.java:129)
        at org.apache.cassandra.db.Keyspace.openWithoutSSTables(Keyspace.java:112)
        at org.apache.cassandra.tools.StandaloneSplitter.main(StandaloneSplitter.java:114)

目录信息

root@cas-sleep-pod:/data/cassandra/public# ls -ld timebucket_auditlog_primary-b275e92070a511eda32ced63d2298aec/
drwxr-xr-x 3 cassandra cassandra 16384 Aug 23 07:47 timebucket_auditlog_primary-b275e92070a511eda32ced63d2298aec/

原因分析

报错核心是Cassandra无法识别public这个keyspace——临时Pod的Cassandra实例没有加载到该keyspace的元数据。元数据存储在Cassandra的系统表(如system_schema.keyspaces)中,若仅挂载了public子目录、未包含完整的系统表数据,工具就无法关联到对应的keyspace。

解决方法

  • 挂载完整数据目录:不要只挂载/data/cassandra/public,而是挂载整个/data/cassandra目录,确保包含system、system_schema等系统表所在的子目录,让工具能读取到keyspace的元数据。
  • 同步配置文件:将原Cassandra Pod的cassandra.yaml配置文件也挂载到临时Pod中,确保实例使用和原Pod一致的配置,包括数据目录路径、集群名称等关键参数。
  • 预创建匹配的keyspace:如果无法挂载完整数据目录,先在临时Pod的Cassandra实例中创建和原keyspace完全一致的public keyspace(复制因子、压缩策略、分区键等必须和原配置相同),再执行sstablesplit命令。
  • 验证权限:确认临时Pod中cassandra用户对/data/cassandra目录及子目录拥有完整的读写权限,当前目录权限显示正常,但需检查上层目录权限是否符合要求。

内容的提问来源于stack exchange,提问作者Mark Caleb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:23