Exception 卡桑德拉的墓碑覆盖例外

Exception 卡桑德拉的墓碑覆盖例外,exception,cassandra,cassandra-2.0,tombstone,Exception,Cassandra,Cassandra 2.0,Tombstone,所以我在查询表中的数据时遇到了这个异常。我在网上读了很多书,据我所知,这是因为我有很多空行。但解决这个问题的方法是什么?我能简单地去掉这些空值吗 更新: 我运行了nodetoolcomact,还尝试了scrubing。在这两种情况下,我都得到了这个 Exception in thread "main" java.lang.AssertionError: [SSTableReader(path='/var/lib/cassandra/data/bitcoin/okcoin_order_book_b

所以我在查询表中的数据时遇到了这个异常。我在网上读了很多书,据我所知,这是因为我有很多空行。但解决这个问题的方法是什么?我能简单地去掉这些空值吗

更新: 我运行了
nodetoolcomact
,还尝试了scrubing。在这两种情况下,我都得到了这个

Exception in thread "main" java.lang.AssertionError: [SSTableReader(path='/var/lib/cassandra/data/bitcoin/okcoin_order_book_btc_usd/bitcoin-okcoin_order_book_btc_usd-jb-538-Data.db'), SSTableReader(path='/var/lib/cassandra/data/bitcoin/okcoin_order_book_btc_usd/bitcoin-okcoin_order_book_btc_usd-jb-710-Data.db'), SSTableReader(path='/var/lib/cassandra/data/bitcoin/okcoin_order_book_btc_usd/bitcoin-okcoin_order_book_btc_usd-jb-627-Data.db'), SSTableReader(path='/var/lib/cassandra/data/bitcoin/okcoin_order_book_btc_usd/bitcoin-okcoin_order_book_btc_usd-jb-437-Data.db')]
at org.apache.cassandra.db.ColumnFamilyStore$13.call(ColumnFamilyStore.java:2132)
at org.apache.cassandra.db.ColumnFamilyStore$13.call(ColumnFamilyStore.java:2129)
at org.apache.cassandra.db.ColumnFamilyStore.runWithCompactionsDisabled(ColumnFamilyStore.java:2111)
at org.apache.cassandra.db.ColumnFamilyStore.markAllCompacting(ColumnFamilyStore.java:2142)
at org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy.getMaximalTask(SizeTieredCompactionStrategy.java:254)
at org.apache.cassandra.db.compaction.CompactionManager.submitMaximal(CompactionManager.java:290)
at org.apache.cassandra.db.compaction.CompactionManager.performMaximal(CompactionManager.java:282)
at org.apache.cassandra.db.ColumnFamilyStore.forceMajorCompaction(ColumnFamilyStore.java:1941)
at org.apache.cassandra.service.StorageService.forceKeyspaceCompaction(StorageService.java:2182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
这些是
system.log

INFO [CompactionExecutor:1888] 2015-01-03 07:22:54,272 CompactionController.java (line 192) Compacting large row bitcoin/okcoin_trade_btc_cny:1972-05 (225021398 bytes) incrementally
INFO [CompactionExecutor:1888] 2015-01-03 07:23:07,528 CompactionController.java (line 192) Compacting large row bitcoin/okcoin_trade_btc_cny:1972-06 (217772702 bytes) incrementally
INFO [CompactionExecutor:1888] 2015-01-03 07:23:20,508 CompactionController.java (line 192) Compacting large row bitcoin/okcoin_trade_btc_cny:2014-05 (121911398 bytes) incrementally
INFO [ScheduledTasks:1] 2015-01-03 07:23:30,941 GCInspector.java (line 116) GC for ParNew: 223 ms for 1 collections, 5642103584 used; max is 8375238656
INFO [CompactionExecutor:1888] 2015-01-03 07:23:33,436 CompactionController.java (line 192) Compacting large row bitcoin/okcoin_trade_btc_cny:2014-07 (106408526 bytes) incrementally
INFO [CompactionExecutor:1888] 2015-01-03 07:23:38,787 CompactionController.java (line 192) Compacting large row bitcoin/okcoin_trade_btc_cny:2014-02 (112031822 bytes) incrementally
INFO [CompactionExecutor:1888] 2015-01-03 07:23:46,055 ColumnFamilyStore.java (line 794) Enqueuing flush of Memtable-compactions_in_progress@582986122(0/0 serialized/live bytes, 1 ops)
INFO [FlushWriter:62] 2015-01-03 07:23:46,055 Memtable.java (line 355) Writing Memtable-compactions_in_progress@582986122(0/0 serialized/live bytes, 1 ops)
INFO [FlushWriter:62] 2015-01-03 07:23:46,268 Memtable.java (line 395) Completed flushing /var/lib/cassandra/data/system/compactions_in_progress/system-compactions_in_progress-jb-22-Data.db (42 bytes) for commitlog position ReplayPosition(segmentId=1420135510457, position=14938165)
INFO [CompactionExecutor:1888] 2015-01-03 07:23:46,354 CompactionTask.java (line 287) Compacted 2 sstables to [/var/lib/cassandra/data/bitcoin/okcoin_trade_btc_cny/bitcoin-okcoin_trade_btc_cny-jb-554,].  881,267,752 bytes to 881,266,793 (~99% of original) in 162,878ms = 5.159945MB/s.  24 total partitions merged to 23.  Partition merge counts were {1:22, 2:1, }
WARN [RMI TCP Connection(39)-128.31.5.27] 2015-01-03 07:24:46,452 ColumnFamilyStore.java (line 2103) Unable to cancel in-progress compactions for okcoin_order_book_btc_usd.  Probably there is an unusually large row in progress somewhere.  It is also possible that buggy code left some sstables compacting after it was done with them
我不知道最后一行是什么意思。似乎没有非常大的行(我不知道如何找到是否有)。值得注意的是,压缩率仍停留在60.33%,并停留在
okcoin\u order\u book\u btc\u usd

我正在运行Cassandra 2.0.11

删除行或从Cassandra中过期时,将创建墓碑。当该行的gc_grace_秒过去后,它们将在压缩SSTables时被删除

我可以想出一些办法来帮助减少墓碑的数量:

  • 为具有大量墓碑的表设置较低的gc_grace_秒-gc_grace_秒通常应比您进行修复的频率多1天。如果你经常进行修理,你可以考虑降低GCGraceSys秒。
  • 看看你的合同进展如何。你有很多待处理的契约吗?(每个节点上的nodetool-h localhost compactionstats将显示这一点)。您可能在压缩方面落后了,并且数据没有得到应有的清理。如果合适的话,还可以考虑更改压缩策略。例如,如果您使用的是SizeTieredCompactionStrategy,可能值得研究LeveledCompactionStrategy,该策略通常会导致更多的压缩活动(因此请确保您有SSD),这可以更快地清理墓碑
  • 看看您的数据模型和正在进行的查询。您是否经常删除或在经常读取的分区中存在过期数据?考虑更改分区(主键)策略,因此删除或过期的行不太可能出现在您的“Live”数据中。一个很好的例子就是将时间/日期添加到主键
  • 在CasdRay.YAML中TunbStONN-Fuffuri阈值可能不会考虑这一点,因为这是一个很好的指示,你需要查看你的数据。
    谢谢!当我查看压缩统计数据时,有一个待处理的压缩似乎在60.33%左右,持续了一个小时。这是正常的吗?这可能意味着一个非常宽的分区,我怀疑在你的情况下可能是这样的,因为你在读的时候有很多墓碑。你认为你有可能有一些很宽的分区吗?(有很多行的分区键)还有,是否有任何挂起的任务,或者它位于0?如果您有适当的监控功能,我将为挂起的压缩和压缩的总字节设置监控,您可以在JMX中找到这些统计信息。哦,既然你问了,我应该加上。这并不是太不寻常,但一个小时是很长的时间,我会一直关注它。所以它说等待的任务:1;还有60.33%的压实度,我该怎么办?不好!system.log文件中有任何有趣的异常吗?另外,您是否可以检查system.log文件中是否存在“压缩大行”的实例?如果您有这些,以及报告的行有多大,您会很感兴趣。我以前见过它们超级巨大(当您在数据建模中出错时,会出现超过70GB的情况:),但不会花那么长的时间,可能需要一两个小时。另外,尝试执行“nodetoolcfstats.”,并查看“压缩分区最大字节数”的值(根据cassandra版本的不同,名称可能会有所不同。一个
    AssertionError
    表示一个bug。如果这是cassandra日志文件,它表示cassandra中有一个bug。很好地了解了AssertionErrors。只是好奇,这是来自nodetool compact还是system.log文件中的内容?我希望System.log文件有一个堆栈跟踪,如果您可以捕获它并将其放在Paste上,这将是一个很好的选择,因为这可能是一个cassandra错误。另外,2.0的哪个版本?您在2.0.11上吗?我更新了这个问题。谢谢!看起来最近也有人遇到了同样的问题:,但根本原因还不清楚。我链接了这个pos我不同意那个问题。