org.apache.cassandra.db.UnknownColumnFamilyException:找不到cfId

时间:2014-04-01 10:45:56

标签: cassandra

在我的现场cassandra群集中,我不小心丢弃了键空间。使用快照,我已经恢复了数据,但现在响应时间非常长,尽管cassandra recentReadLatencyMicros在<所有节点上都有2ms。

恢复后,我经常跟踪异常,我再次创建了所有列系列但仍然获得异常。我怎么知道cfId我缺少哪个列族。我还检查了 schema_columnfamilies ,但此cfId不存在。非常感谢任何帮助。

  

错误[RequestResponseStage:1094556] 2014-04-01 03:12:05,583   AbstractCassandraDaemon.java(第132行)线程中的异常   线程[RequestResponseStage:1094556,5,main] java.io.IOError:   org.apache.cassandra.db.UnknownColumnFamilyException:找不到   cfId = 1118 at   org.apache.cassandra.service.AbstractRowResolver.preprocess(AbstractRowResolver.java:71)     在   org.apache.cassandra.service.AsyncRepairCallback.response(AsyncRepairCallback.java:47)     在   org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:45)     在   org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:59)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:722)引起:   org.apache.cassandra.db.UnknownColumnFamilyException:找不到   cfId = 1118 at   org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamilySerializer.java:126)     在org.apache.cassandra.db.Row $ RowSerializer.deserialize(Row.java:72)     在   org.apache.cassandra.db.ReadResponseSerializer.deserialize(ReadResponse.java:109)     在   org.apache.cassandra.db.ReadResponseSerializer.deserialize(ReadResponse.java:81)     在   org.apache.cassandra.service.AbstractRowResolver.preprocess(AbstractRowResolver.java:64)

1 个答案:

答案 0 :(得分:0)

予。在CQLSH中运行此命令以获取已恢复(损坏)密钥空间中的CF列表:

SELECT columnfamily_name FROM system.schema_columnfamilies 
WHERE keyspace_name='your_keyspace';

(将your_keyspace替换为适当的名称。)

II。转到您的快照,看看有哪些目录。

III。检查第一个列表中是否缺少第二个列表中的任何项目。如果您有数百个CF,您可能需要使用一些脚本来快速找到丢失的表。或者只是将两个列表粘贴到电子表格中并进行排序。然后通过目测,你应该能够快速看到不匹配的行。