我使用Thrift
和CQL
datastax java driver 1.0.1
更改为cassandra 1.2.6..
有了节俭,我从一开始就经常超时,我无法继续......采用CQL,按照我的设计表,我获得了成功,减少了超时......
有了这个我能够插入大量数据,这些数据与thrift无法合作......但经过一个阶段,数据文件夹大约3.5GB。我经常写入超时异常。即使我再次使用相同的早期工作用例,现在也会抛出超时异常。即使在新设置之后,其随机工作也不会再工作。
CASSADNRA服务器日志
这是cassandra服务器部分日志DEBUG模式,然后我收到错误:
客户端例外是:
Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
at com.datastax.driver.core.Session.execute(Session.java:107)
at com.datastax.driver.core.Session.execute(Session.java:76)
基础设施: 16GB机器,8GB堆给cassandra,i7处理器.. 我正在使用SINGLE节点cassandra将此yaml调整为超时,其他一切都是默认的:
使用案例 我正在运行一个用于在cassandra中存储组合(我的项目术语)的用例....当前测试存储250个组合与100个并行线程..每个线程存储一个组合...真实情况我需要支持数千万但那将需要不同的硬件和多节点集群...
存储ONE组合大约需要2秒,并且涉及:
100个并行线程并行存储100个组合。
我发现WRITE TIMEOUTS的行为是随机的,一段时间它一直工作到200 000然后抛出超时,有时甚至不能用于10k组合。随机行为。
答案 0 :(得分:2)
我发现在一些cassandra-stress读取操作期间,如果我将速率线程设置得太高,我将得到CL错误。考虑在测试期间将线程数降低到池可承受的价格,以便击败
在我看来,在cassandra.yaml中修改它并不总是一个好主意。考虑一下您的机器使用的硬件资源。
为鸡蛋:
cassandra-stress read n=100000 cl=ONE -rate threads=200 -node N1
会给我错误,而
cassandra-stress read n=100000 cl=ONE -rate threads=121 -node N1
将顺利完成这项工作。
希望它可以帮助你们。
P.S。当您进行读取测试时,尝试使用' -pop dist = UNIFORM(1..1000000)'来扩展读数甚至数据。或者你想要多少。
答案 1 :(得分:1)
花了一些时间来阅读我的dev cassandra节点配置yaml,因为我遇到了类似的问题。当我尝试用只有600MB RAM的开发节点加载大约30亿个sha2哈希时,我的系统停滞并抛出时间;)
我通过减少缓存大小来修复它,并在刷新之前等待,等等。这使得节点写入速度变慢,但它变得稳定。然后我能够加载尽可能多的数据。
但很遗憾我无法弄清楚哪些选项。 我记得我读过有关性能调优的文档以及如何根据cpu内核,ram等计算系统的正确值。
我遇到的问题是缓存的写入速度不够快,所以它开始阻止所有内容。在说完之后,写更频繁并让新请求等待,节点变得稳定,我的导入变慢了。
它认为cassandra的默认选项适用于在多节点集群中具有大量核心的重型ram机器,可以分散负载。要让它在本地开发环境中运行,请将其拧下来。它的开发环境而不是生命系统,花点时间喝一两杯咖啡;)
希望有助于以正确的方式思考
答案 2 :(得分:0)
从您的日志片段中,只有4 GB的堆被提供给Cassandra,并且它已经满了。这很可能是你的问题:
DEBUG [ScheduledTasks:1] 2013-08-07 15:08:09,434 GCInspector.java (line 121) GC for ParNew: 155 ms for 6 collections, 3230372760 used; max is 4277534720
max是4277534720 == 4 GB堆。您应该进入cassandra-env.sh并显式设置最大堆和新堆大小。对于您描述的节点,8 GB最大堆和800 MB新堆可能是一个很好的起点。
答案 3 :(得分:0)
我也遇到过这个问题, " Cassandra超时写查询一致性LOCAL_ONE(0个副本)确认写入超过1需要" " Cassandra超时期间读取查询一致LOCAL_ONE(0个副本)确认写入超过1"。 我通过更改cassandra.yaml中的参数来处理它。 搜索"超时"在cassandra.yaml,你会发现 read_request_timeout_in_ms:5000 write_request_timeout_in_ms:2000 增加数量,重新启动" cassandra -f"。我的问题解决了。 希望对你也有帮助!