我们尝试使用 cassandra cli 删除 CF
DROP COLUMN FAMILY cfName
当我们从 CLI 列出 CF 时,它不存在,当我试图通过 hector 获取现有 CF 时
我仍然可以看到 CF 名称
KeyspaceDefinition keyspaceDefinition = newConnection().describeKeyspace(keyspaceName);
keyspaceDefinition.getCfDefs();
CF 中的数据不存在但是,CF 仍然列出,在通过 hector 列出 CF 之后,如果我执行 cassandra -cli list column families 我可以再次看到我删除的 CF
最佳答案
我也不得不在 Cassandra 1.1 上处理这个问题。基本上,我的列族已经损坏,更改其模式的唯一方法是删除/恢复键空间(当时 DataStax 引导我完成了)。
如果您与 DataStax 签订了支持契约(Contract),我强烈建议您在继续之前联系他们。他们会告诉您的第一件事是,这是特定版本的 Cassandra 1.1 中的错误,您应该升级。我没有测试过,但根据他们的说法,就地升级将允许您在新版本中修改架构。因此,您可以通过升级到 1.2 或 2.0 来解决此问题。
就我而言(生产、企业环境)现场升级不是一种选择。为了解决这个问题,我基本上不得不删除我的整个键空间,重新创建它(和我的列族),然后从快照中恢复。我松散地遵循了 instructions found here :
- 为每个节点上的键空间拍一张快照。快照文件应存储在 [keyspaceName]/snapshots 目录中,但为了安全起见,我将我的快照文件复制到了另一个非 Cassandra 位置。
- 删除您的 key 空间。
- 停止所有节点。
- 在每个节点上,删除 key 空间目录(但不包括快照目录)中的 .db 文件。
- 将快照目录中的文件复制回 key 空间目录。
- 重启一个节点
- 从该节点的
cassandra-cli
重新创建您的 key 空间。 - 验证您的数据是否存在。
- 重启其余节点。
关于cassandra - 来自 cassandra CLI 的 DROP COLUMN FAMILY 不会删除 CF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982954/