Cassandra 1.1.1在使用Hector 1.0.5插入大量数据时崩溃
我使用的是Cassandra 1.1.1和Hector 1.0.5,我试图将数据(大容量)插入到列族中。在我的程序执行期间,cassandra服务器崩溃并显示内存不足错误。在此之后,我别无选择,只能退出服务器。在我试图存储html文件内容的一个列族中,这种情况会重复出现,但我从来没有机会完成它。html文件的内容从一行的225 KB数据到700 KB数据不等,我正在尝试插入近1000条记录Cassandra 1.1.1在使用Hector 1.0.5插入大量数据时崩溃,cassandra,hector,Cassandra,Hector,我使用的是Cassandra 1.1.1和Hector 1.0.5,我试图将数据(大容量)插入到列族中。在我的程序执行期间,cassandra服务器崩溃并显示内存不足错误。在此之后,我别无选择,只能退出服务器。在我试图存储html文件内容的一个列族中,这种情况会重复出现,但我从来没有机会完成它。html文件的内容从一行的225 KB数据到700 KB数据不等,我正在尝试插入近1000条记录 在程序中,它抛出下面的 Exception in thread "main" me.prettyprin
在程序中,它抛出下面的
Exception in thread "main" me.prettyprint.hector.api.exceptions.HectorException: All host pools marked down. Retry burden pushed out to client.
at me.prettyprint.cassandra.connection.HConnectionManager.getClientFromLBPolicy(HConnectionManager.java:393)
at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:249)
at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:243)
at com.epocrates.soa.rx.util.DiseaseImporter.insertDisease(DiseaseImporter.java:207)
at com.epocrates.soa.rx.util.DiseaseImporter.batchProcess(DiseaseImporter.java:81)
at com.epocrates.soa.rx.
main(DiseaseImporter.java:37)
在System.log中,我找到以下内容
java.io.IOError:java.io.IOException:Map失败
位于org.apache.cassandra.db.commitlog.CommitLogSegment.(CommitLogSegment.java:127)
位于org.apache.cassandra.db.commitlog.CommitLogSegment.freshSegment(CommitLogSegment.java:80)
位于org.apache.cassandra.db.commitlog.CommitLogAllocator.createFreshSegment(CommitLogAllocator.java:244)
访问org.apache.cassandra.db.commitlog.CommitLogAllocator.access$500(CommitLogAllocator.java:49)
位于org.apache.cassandra.db.commitlog.CommitLogAllocator$1.runmaytrow(CommitLogAllocator.java:104)
位于org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
运行(Thread.java:662)
原因:java.io.IOException:映射失败
位于sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:758)
位于org.apache.cassandra.db.commitlog.CommitLogSegment.(CommitLogSegment.java:119)
... 还有6个
原因:java.lang.OutOfMemoryError:映射失败
位于sun.nio.ch.FileChannelImpl.map0(本机方法)
位于sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)
... 还有7个
java.util.concurrent.RejectedExecutionException:ThreadPoolExecutor已关闭
位于org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor$1.rejectedExecution(DebuggableThreadPoolExecutor.java:60)
位于java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
位于java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
位于org.apache.cassandra.service.StorageProxy.insertLocal(StorageProxy.java:457)
位于org.apache.cassandra.service.StorageProxy.sendtointendpoints(StorageProxy.java:314)
位于org.apache.cassandra.service.StorageProxy$2.apply(StorageProxy.java:119)
位于org.apache.cassandra.service.StorageProxy.performWrite(StorageProxy.java:260)
位于org.apache.cassandra.service.StorageProxy.mutate(StorageProxy.java:193)
位于org.apache.cassandra.thrift.CassandraServer.doInsert(CassandraServer.java:637)
位于org.apache.cassandra.thrift.CassandraServer.internal_batch_mutate(CassandraServer.java:587)
位于org.apache.cassandra.thrift.CassandraServer.batch_mutate(CassandraServer.java:595)
位于org.apache.cassandra.thrift.cassandra$Processor$batch_mutate.getResult(cassandra.java:3112)
位于org.apache.cassandra.thrift.cassandra$Processor$batch_mutate.getResult(cassandra.java:3100)
位于org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
位于org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
位于org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
这意味着您已经用完了将commitlog段映射到的地址空间 最佳解决方案:升级到64位JVM 更糟糕的解决方案:在cassandra.yaml中,将commitlog_segment_size_in_mb和commitlog_total_space_in_mb都设置为16
这已经不是第一次了;我已打开以改进默认设置。谢谢您的回复,John。我选择了更差的解决方案,因为测试最好的解决方案需要一些时间。当我说“commitlog_total_space_in_mb”到16时,结果是这样的。
java.io.IOError: java.io.IOException: Map failed
at org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:127)
at org.apache.cassandra.db.commitlog.CommitLogSegment.freshSegment(CommitLogSegment.java:80)
at org.apache.cassandra.db.commitlog.CommitLogAllocator.createFreshSegment(CommitLogAllocator.java:244)
at org.apache.cassandra.db.commitlog.CommitLogAllocator.access$500(CommitLogAllocator.java:49)
at org.apache.cassandra.db.commitlog.CommitLogAllocator$1.runMayThrow(CommitLogAllocator.java:104)
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:758)
at org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:119)
... 6 more
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)
... 7 more
java.util.concurrent.RejectedExecutionException: ThreadPoolExecutor has shut down
at org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor$1.rejectedExecution(DebuggableThreadPoolExecutor.java:60)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
at org.apache.cassandra.service.StorageProxy.insertLocal(StorageProxy.java:457)
at org.apache.cassandra.service.StorageProxy.sendToHintedEndpoints(StorageProxy.java:314)
at org.apache.cassandra.service.StorageProxy$2.apply(StorageProxy.java:119)
at org.apache.cassandra.service.StorageProxy.performWrite(StorageProxy.java:260)
at org.apache.cassandra.service.StorageProxy.mutate(StorageProxy.java:193)
at org.apache.cassandra.thrift.CassandraServer.doInsert(CassandraServer.java:637)
at org.apache.cassandra.thrift.CassandraServer.internal_batch_mutate(CassandraServer.java:587)
at org.apache.cassandra.thrift.CassandraServer.batch_mutate(CassandraServer.java:595)
at org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.getResult(Cassandra.java:3112)
at org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.getResult(Cassandra.java:3100)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)