在我的现场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)
答案 0 :(得分:0)
予。在CQLSH中运行此命令以获取已恢复(损坏)密钥空间中的CF列表:
SELECT columnfamily_name FROM system.schema_columnfamilies
WHERE keyspace_name='your_keyspace';
(将your_keyspace
替换为适当的名称。)
II。转到您的快照,看看有哪些目录。
III。检查第一个列表中是否缺少第二个列表中的任何项目。如果您有数百个CF,您可能需要使用一些脚本来快速找到丢失的表。或者只是将两个列表粘贴到电子表格中并进行排序。然后通过目测,你应该能够快速看到不匹配的行。