【发布时间】:2015-01-01 00:48:42
【问题描述】:
几天前,我在 Cassandra 1.2 中删除了一篇专栏文章: 1. 放下整张桌子, 2.重新创建表,没有列, 3.插入插入语句(不带列)。
之所以这样做,是因为 Cassandra 1.2 不支持“drop column”操作。
今天,由于数据损坏问题,我收到了运营团队的通知。 我的问题:
- 根本原因是什么?
-
如何解决?
错误 [ReadStage:79] 2014-11-04 11:29:55,021 CassandraDaemon.java(第 191 行)线程异常 [ReadStage:79,5,main] 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.computeNext(SimpleSliceReader.java:110) 在 org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:40) 在 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) 在 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) 在 org.apache.cassandra.db.columniterator.SSTableSliceIterator.hasNext(SSTableSliceIterator.java:90) 在 org.apache.cassandra.db.filter.QueryFilter$2.getNext(QueryFilter.java:171) 在 org.apache.cassandra.db.filter.QueryFilter$2.hasNext(QueryFilter.java:154) 在 org.apache.cassandra.utils.MergeIterator$OneToOne.computeNext(MergeIterator.java:199) 在 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) 在 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) 在 org.apache.cassandra.db.filter.SliceQueryFilter.collectReducedColumns(SliceQueryFilter.java:160) 在 org.apache.cassandra.db.filter.QueryFilter.collateColumns(QueryFilter.java:136) 在 org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtom(QueryFilter.java:84) 在 org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:291) 在 org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:65) 在 org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1398) 在 org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1214) 在 org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1130) 在 org.apache.cassandra.db.Table.getRow(Table.java:344) 在 org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:70) 在 org.apache.cassandra.db.ReadVerbHandler.doVerb(ReadVerbHandler.java:44) 在 org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:56) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 原因:org.apache.cassandra.db.ColumnSerializer$CorruptColumnException:无效列名长度 0(/data/cassandra/data/xxx/yyy/zzz-Data.db,剩余 1799885 字节) 在 org.apache.cassandra.db.ColumnSerializer$CorruptColumnException.create(ColumnSerializer.java:148) 在 org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:86) 在 org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:73) 在 org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:106) ... 24 更多 错误 [ReadStage:89] 2014-11-04 11:29:58,076 CassandraDaemon.java(第 191 行)线程线程中的异常 [ReadStage:89,5,main] java.lang.OutOfMemoryError:Java 堆空间 在 org.apache.cassandra.io.util.RandomAccessReader.readBytes(RandomAccessReader.java:376) 在 org.apache.cassandra.utils.ByteBufferUtil.read(ByteBufferUtil.java:392) 在 org.apache.cassandra.utils.ByteBufferUtil.readWithLength(ByteBufferUtil.java:355) 在 org.apache.cassandra.db.ColumnSerializer.deserializeColumnBody(ColumnSerializer.java:108) 在 org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:92) 在 org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:73) 在 org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:106) 在 org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:40) 在 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) 在 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) 在 org.apache.cassandra.db.columniterator.SSTableSliceIterator.hasNext(SSTableSliceIterator.java:90) 在 org.apache.cassandra.db.filter.QueryFilter$2.getNext(QueryFilter.java:171) 在 org.apache.cassandra.db.filter.QueryFilter$2.hasNext(QueryFilter.java:154) 在 org.apache.cassandra.utils.MergeIterator$OneToOne.computeNext(MergeIterator.java:199)
【问题讨论】:
-
可能与issues.apache.org/jira/browse/CASSANDRA-5225有关,你是最新的1.2吗?
-
听起来也像 issues.apache.org/jira/browse/CASSANDRA-5761 如果您有办法重现此问题,我们可能想尝试恢复此票证。
标签: cassandra