当cassandra-driver执行查询时,cassandra-driver返回错误OperationTimedOut

fer*_*vid 5 python cassandra cql3

我使用python脚本,传递给cassandra批量查询,如下所示:

query = 'BEGIN BATCH ' + 'insert into ... ; insert into ... ; insert into ...; ' + ' APPLY BATCH;'
session.execute(query)
Run Code Online (Sandbox Code Playgroud)



这是一段时间的工作,但在启动脚本失败并打印后约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>
Run Code Online (Sandbox Code Playgroud)

我将超时更改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序列化/实时字节,4个操作)
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行)GC为ParNew:640 ms为3个集合,775214160使用; max是1052770304
INFO [ScheduledTasks:1] 2014-06-11 14:18:16,155 GCInspector.java(第116行)GC用于ConcurrentMarkSweep:1838 ms用于2个集合,810976000使用; max是1052770304
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,959 GCInspector.java(第116行)GC用于ConcurrentMarkSweep:1612 ms用于1个集合,858404088使用; max是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
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行)RequestResponseStage 0
0 0 0 0
INFO [ScheduledTasks:1] 2014 -06-11 14:18:17,960 StatusLogger.java(第70行)ReadRepairStage 0 0 0 0 0
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行)MutationStage 0
0 184386 0 0
INFO [ScheduledTasks:1] 2014-06-11 14:18:17,960 StatusLogger.java(第70行)ReplicateOnWriteStage 0 0 0 0 0

Ale*_*scu 16

  1. 这是客户端超时(请参阅@ Syrial回复中的链接:http://datastax.github.io/python-driver/api/cassandra.html#cassandra.OperationTimedOut )

  2. 您可以更改Session 默认超时:

    session = cluster.connect()
    session.default_timeout = 30  # this is in *seconds*
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您可以更改特定查询的超时:

    session.execute(statement, 30, ...)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 通过使用内部的预处理语句,您可以加快执行速度BATCH.请参阅本文中的" 批处理语句"部分

  5. 如果您获得更好的结果,请阅读这些性能说明


小智 1

根据文档,此错误表明操作花费的时间比客户端指定的时间长。该错误是由驱动程序生成的,而不是 Cassandra。我仍在寻找一种方法来自己处理这个错误。

http://datastax.github.io/python-driver/api/cassandra.html#cassandra.OperationTimedOut