Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Cassandra 1.2中会发生数据损坏?_Cassandra - Fatal编程技术网

为什么Cassandra 1.2中会发生数据损坏?

为什么Cassandra 1.2中会发生数据损坏?,cassandra,Cassandra,几天前,我在Cassandra 1.2上发表了一篇专栏文章: 1.放下整张桌子, 2.重新创建表,不包含列, 3.不带列的insert语句 我这样做的原因是因为Cassandra1.2不支持drop列操作 今天,由于数据损坏问题,Ops团队通知我。 我的问题是: 根本原因是什么? 如何修复它 错误[ReadStage:79]2014-11-04 11:29:55021 cassandrademon.java线程[ReadStage:79,5,main]中的第191行异常 org.apache.c

几天前,我在Cassandra 1.2上发表了一篇专栏文章: 1.放下整张桌子, 2.重新创建表,不包含列, 3.不带列的insert语句

我这样做的原因是因为Cassandra1.2不支持drop列操作

今天,由于数据损坏问题,Ops团队通知我。 我的问题是:

根本原因是什么? 如何修复它

错误[ReadStage:79]2014-11-04 11:29:55021 cassandrademon.java线程[ReadStage:79,5,main]中的第191行异常 org.apache.cassandra.io.sstable.CorruptSSTableException:org.apache.cassandra.db.ColumnSerializer$CorruptColumnException:无效列名长度0/data/cassandra/data/xxx/yyy/zzz-data.db,剩余1799885字节 位于org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNextSimpleSliceReader.java:110 位于org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNextSimpleSliceReader.java:40 在com.google.common.collect.AbstractIterator.tryToComputeNextAbstractIterator.java:143 位于com.google.common.collect.AbstractIterator.hasNextAbstractIterator.java:138 位于org.apache.cassandra.db.columniterator.SSTableSliceIterator.hasNextSSTableSliceIterator.java:90 位于org.apache.cassandra.db.filter.QueryFilter$2.getNextQueryFilter.java:171 位于org.apache.cassandra.db.filter.QueryFilter$2.hasNextQueryFilter.java:154 位于org.apache.cassandra.utils.MergeIterator$OneToOne.computeNextMergeIterator.java:199 在com.google.common.collect.AbstractIterator.tryToComputeNextAbstractIterator.java:143 位于com.google.common.collect.AbstractIterator.hasNextAbstractIterator.java:138 在org.apache.cassandra.db.filter.SliceQueryFilter.CollectReducedColumnsLiceQueryFilter.java:160 位于org.apache.cassandra.db.filter.QueryFilter.collateColumnsQueryFilter.java:136 位于org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtomQueryFilter.java:84 位于org.apache.cassandra.db.CollationController.collectAllDataCollationController.java:291 位于org.apache.cassandra.db.CollationController.getTopLevel ColumnsCallationController.java:65 位于org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumnsColumnFamilyStore.java:1398 位于org.apache.cassandra.db.ColumnFamilyStore.getColumnFamilyColumnFamilyStore.java:1214 位于org.apache.cassandra.db.ColumnFamilyStore.getColumnFamilyColumnFamilyStore.java:1130 位于org.apache.cassandra.db.Table.getRowTable.java:344 位于org.apache.cassandra.db.SliceFromReadCommand.getrowsicefromreadcommand.java:70 位于org.apache.cassandra.db.ReadVerbHandler.doVerbReadVerbHandler.java:44 位于org.apache.cassandra.net.MessageDeliveryTask.runMessageDeliveryTask.java:56 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTaskUnknown Source 位于java.util.concurrent.ThreadPoolExecutor$Worker.runUnknown Source 位于java.lang.Thread.runUnknown Source 原因:org.apache.cassandra.db.ColumnSerializer$CorruptColumnException:无效列名长度0/data/cassandra/data/xxx/yyy/zzz-data.db,剩余1799885字节 org.apache.cassandra.db.ColumnSerializer$CorruptColumnException.createColumnSerializer.java:148 位于org.apache.cassandra.db.OnDiskAtom$Serializer.deserializefromstableondiskatom.java:86 位于org.apache.cassandra.db.OnDiskAtom$Serializer.Deserializefromstableondiskatom.java:73 位于org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNextSimpleSliceReader.java:106 ... 还有24个 错误[ReadStage:89]2014-11-04 11:29:58076 cassandrademon.java线程[ReadStage:89,5,main]中的第191行异常 java.lang.OutOfMemoryError:java堆空间 位于org.apache.cassandra.io.util.RandomAccessReader.readBytesRandomAccessReader.java:376 位于org.apache.cassandra.utils.ByteBufferUtil.readByteBufferUtil.java:392 位于org.apache.cassandra.utils.ByteBufferUtil.readWithLength ByteBufferUtil.java:355 位于org.apache.cassandra.db.ColumnSerializer.deserializeColumnBodyColumnSerializer.java:108 位于org.apache.cassandra.db.OnDiskAtom$Serializer.deserializefromstableondiskatom.java:92 位于org.apache.cassandra.db.OnDiskAtom$Serializer.Deserializefromstableondiskatom.java:73 位于org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNextSimpleSliceReader.java:106 位于org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNextSimpleSliceReader.java:40 在com.google.common.collect.AbstractIterator.tryToComputeNextAbstractIterator.java:143 位于com.google.common.collect.AbstractIterator.hasNextAbstractIterator.java:138 位于org.apache.cassandra.db.columniterator.SSTableSliceIterator.hasNextSSTableSliceIterator.java:90 位于org.apache.cassandra.db.filter.QueryFilter$2.getNextQueryFilter.java:171 位于org.apache.cassandra.db.filter.QueryFilter$2.hasNextQueryFilter.java:154 位于org.apache.cassandra.utils.MergeIterator$OneToOne.computeNextMergeIterator.java:199

C*1.2支持公司 cql表的列删除-

但是,我认为您描述的在没有列的情况下重新创建新表的过程没有任何错误。这里有一些前进的步骤

假设- 你看到的腐败在新表中,而不是旧表中 他们有相同的名字吗

您的复制因子和节点数都很高 足够使您能够使此节点脱机

nodetool drain
您的客户机的负载平衡策略已正确设置,因此 当节点发生故障时,它将故障转移到另一个节点

程序- 1使您的节点脱机

nodetool drain
这将刷新memtables并使节点停止接受请求

2运行nodetool磨砂机

nodetool scrub [keyspace][table]
如果这成功完成,那么就完成了,通过重新启动cassandra并运行nodetool修复键空间表来备份节点

3如果清除错误可能是由于损坏错误,请尝试sstablescrub实用程序。将ssh插入您的机箱并运行:

表积垢

请注意,请使用启动cassandra时使用的同一操作系统用户运行此命令

如果这成功完成,那么就完成了,通过重新启动cassandra并运行nodetool修复键空间表来备份节点

4如果此操作无法再次执行,则必须删除SStable并使用“修复”从其他复制副本中重建它:

将罪魁祸首sstable从数据目录移动到备份目录 重启卡桑德拉 重新构建后删除它 nodetool repair keyspace cf-此修复需要时间。
请告诉我您是否能够复制此损坏。C*1.2支持cql表的列删除-

但是,我认为您描述的在没有列的情况下重新创建新表的过程没有任何错误。这里有一些前进的步骤

假设- 你看到的腐败在新表中,而不是旧表中 他们有相同的名字吗

您的复制因子和节点数都很高 足够使您能够使此节点脱机

nodetool drain
您的客户机的负载平衡策略已正确设置,因此 当节点发生故障时,它将故障转移到另一个节点

程序- 1使您的节点脱机

nodetool drain
这将刷新memtables并使节点停止接受请求

2运行nodetool磨砂机

nodetool scrub [keyspace][table]
如果这成功完成,那么就完成了,通过重新启动cassandra并运行nodetool修复键空间表来备份节点

3如果清除错误可能是由于损坏错误,请尝试sstablescrub实用程序。将ssh插入您的机箱并运行:

表积垢

请注意,请使用启动cassandra时使用的同一操作系统用户运行此命令

如果这成功完成,那么就完成了,通过重新启动cassandra并运行nodetool修复键空间表来备份节点

4如果此操作无法再次执行,则必须删除SStable并使用“修复”从其他复制副本中重建它:

将罪魁祸首sstable从数据目录移动到备份目录 重启卡桑德拉 重新构建后删除它 nodetool repair keyspace cf-此修复需要时间。
请让我知道你是否能够复制此腐败。可能与你是否使用最新的1.2有关?听起来如果你有办法复制此,我们可能会尝试恢复此票证。可能与你是否使用最新的1.2有关?听起来如果你有办法复制此票证,我们可能想恢复这张票。我的运营工程师发现了这个问题。这是由于密钥缓存。在她的调查中,她使keycache无效,并删除/重新创建表,这次一切正常。我的Ops工程师发现了问题。这是由于密钥缓存。在她的调查中,她使keycache无效,并删除/重新创建表,这次一切正常。