我使用python脚本,传递给cassandra批量查询,如下所示:
query = 'BEGIN BATCH ' + 'insert into ... ; insert into ... ; insert into ...; ' + ' APPLY BATCH;'
session.execute(query)
这是一段时间的工作,但在启动脚本失败并打印后大约2分钟内打印:
Traceback (most recent call last):<br>
File "/home/fervid/Desktop/cassandra/scripts/parse_and_save_to_cassandra.cgi", line 127, in <module><br>
session.execute(query)<br>
File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1103, in execute<br>
result = future.result(timeout)<br>
File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 2475, in result<br>
raise OperationTimedOut(errors=self._errors, last_host=self._current_host)<br>
cassandra.OperationTimedOut: errors={}, last_host=127.0.0.1<br>
<br>
<br>
我将超时从cassandra.yaml
更改为:
read_request_timeout_in_ms: 15000
range_request_timeout_in_ms: 20000
write_request_timeout_in_ms: 20000
cas_contention_timeout_in_ms: 10000
request_timeout_in_ms: 25000
然后我重新启动了cassandra,但它没有帮助。错误一次又一次地发生!
脚本失败时的日志行:
INFO [BatchlogTasks:1] 2014-06-11 14:18:10,490 ColumnFamilyStore.java (第794行)排队 Memtable-batchlog @ 28149592(13557969/13557969 serialized / live bytes,4 ops)
INFO [FlushWriter:10] 2014-06-11 14:18:10,490 Memtable.java (第363行)编写Memtable-batchlog @ 28149592(13557969/13557969 序列化/活字节,4个操作)
INFO [FlushWriter:10] 2014-06-11 14:18:10,566 Memtable.java(第410行)完成冲洗;没有 需要保留。提交日志的位置是 ReplayPosition(segmentId = 1402469922169,position = 27138996)
INFO [ScheduledTasks:1] 2014-06-11 14:18:13,758 GCInspector.java(第116行) 用于ParNew的GC:3个集合为640毫秒,使用775214160;最大的是 1052770304
INFO [ScheduledTasks:1] 2014-06-11 14:18:16,155 GCInspector.java(第116行)GC用于ConcurrentMarkSweep:1838毫秒用于2 收藏品,810976000使用;最大值是1052770304
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,959 GCInspector.java(第116行) 用于ConcurrentMarkSweep的GC:1个集合为1612毫秒,使用858404088; 最大值是1052770304
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,959 StatusLogger.java(第55行)池名称有效
待完成阻止所有时间被阻止
信息 [ScheduledTasks:1] 2014-06-11 14:18:17,959 StatusLogger.java(第70行) ReadStage 0 0 627 0 0
信息[ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行)RequestResponseStage 0
0 0 0 0
信息 [ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行) ReadRepairStage 0 0 0 0 0
信息[ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行)MutationStage 0
0 184386 0 0
信息 [ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行) ReplicateOnWriteStage 0 0 0 0 0
答案 0 :(得分:16)
这是客户端超时(请参阅@ Syrial回复中的链接:http://datastax.github.io/python-driver/api/cassandra.html#cassandra.OperationTimedOut)
您可以更改Session
default timeout:
session = cluster.connect()
session.default_timeout = 30 # this is in *seconds*
您可以更改the timeout for a particular query:
session.execute(statement, 30, ...)
通过在BATCH
中使用预准备语句,可以大大加快执行速度。请参阅Batching statements sections in this post
如果您的效果更佳,请阅读这些performance notes
答案 1 :(得分:1)
根据文档,此错误表示操作所花费的时间比客户端指定的时间长。错误是由驱动程序生成的,而不是Cassandra。我自己一直在寻找一种处理这个错误的方法。
http://datastax.github.io/python-driver/api/cassandra.html#cassandra.OperationTimedOut