3

我们尝试使用 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 family,我可以再次看到我删除的 CF

4

1 回答 1

4

我也不得不在 Cassandra 1.1 上处理这个问题。基本上,我的列族已损坏,更改其架构的唯一方法是删除/恢复键空间(当时 DataStax 引导我完成)。

如果您与 DataStax 签订了支持合同,我强烈建议您在继续之前与他们联系。他们会告诉你的第一件事是,这是 Cassandra 1.1 特定版本中的一个错误,你应该升级。我尚未对其进行测试,但根据他们的说法,就地升级将允许您在新版本中修改架构。因此,您可以通过升级到 1.2 或 2.0 来解决此问题。

在我的情况下(生产、企业环境),现场升级不是一种选择。为了解决这个问题,我基本上不得不删除我的整个键空间,重新创建它(和我的列族),然后从快照中恢复。我松散地遵循了此处的说明

  • 对每个节点上的键空间进行快照。快照文件应该存储在 [keyspaceName]/snapshots 目录中,但为了安全起见,我将我的文件复制到了另一个非 Cassandra 位置。
  • 删除您的密钥空间。
  • 停止所有节点。
  • 在每个节点上,删除键空间目录(但不是快照目录)中的 .db 文件。
  • 将快照目录中的文件复制回密钥空间目录。
  • 重启一个节点
  • 从该节点cassandra-cli重新创建您的密钥空间。
  • 验证您的数据是否存在。
  • 重新启动其余节点。
于 2014-04-10T16:30:54.647 回答