插入了80万行后悬挂的卡桑德拉

时间:2014-02-16 03:59:20

标签: cassandra bigdata nodetool

使用默认配置的Cassandra安装。只需一个节点服务器,48GB内存,2 TB硬盘。当它显着减速时,插入了大约8000万行。超时错误拒绝新连接。

Opssenter也会抛出超时。

htop显示1个加载CPU 100%的cassandra进程

iotop显示周期性读取/写入,但实际上是低密集型 - 因此HDD不是瓶颈

很多RAM仍然是免费的,没有任何东西被交换

nodetool tpstats - 没有工作,用“java.net.SocketTimeoutException:read timed out”粉碎了

nodetool status - 显示服务器正常工作(!):UN,load为122GB,拥有100%,令牌256

tail /var/log/cassandra/system.log - 对我来说没什么信息,最后一行是

INFO [ScheduledTasks:1] 2014-02-16 04:36:21,824 StatusLogger.java (line 121) system.local

发生了什么事?如何查找当前执行的操作列表?如何找到那种行为的原因?以及如何让它恢复正常?

谢谢!

P.S。最后它抛出了一个例外:

ERROR [ReadStage:1550] 2014-02-16 05:22:26,476 CassandraDaemon.java(第192行)线程中的异常线程[ReadStage:1550,5,main] java.lang.OutOfMemoryError:Java堆空间         在org.apache.cassandra.io.util.RandomAccessReader。(RandomAccessReader.java:69)         在org.apache.cassandra.io.compress.CompressedRandomAccessReader。(CompressedRandomAccessReader.java:76)         在org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:43)         在org.apache.cassandra.io.util.CompressedPoolingSegmentedFile.createReader(CompressedPoolingSegmentedFile.java:48)         在org.apache.cassandra.io.util.PoolingSegmentedFile.getSegment(PoolingSegmentedFile.java:39)         at org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput(SSTableReader.java:1195)         在org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart(IndexedSliceReader.java:108)         在org.apache.cassandra.db.columniterator.IndexedSliceReader。(IndexedSliceReader.java:84)         在org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader(SSTableSliceIterator.java:65)         在org.apache.cassandra.db.columniterator.SSTableSliceIterator。(SSTableSliceIterator.java:42)         在org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:167)         在org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62)         在org.apache.cassandra.db.Collat​​ionController.collectAllData(Collat​​ionController.java:273)         在org.apache.cassandra.db.Collat​​ionController.getTopLevelColumns(Collat​​ionController.java:53)         在org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1560)         在org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1379)         在org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:327)         在org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65)         在org.apache.cassandra.service.StorageProxy $ LocalReadRunnable.runMayThrow(StorageProxy.java:1396)         在org.apache.cassandra.service.StorageProxy $ DroppableRunnable.run(StorageProxy.java:1931)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)         在java.lang.Thread.run(Thread.java:744)

1 个答案:

答案 0 :(得分:0)

从Cassandra的角度来看,你确定它们实际上是8000万行吗?如果您使用的是CQL3,并且主键的第一列对于所有行都是相同的,则它们将全部位于隐蔽下的同一行中,因为这是分区键。这可以让卡桑德拉陷入困境。

检查“行大小”列的cfhistograms,看看是否有大量行。