Python cassandra 驱动读取超时
Python cassandra driver Readtimeout
每次我尝试使用 cassandra python 驱动程序获取查询时,我都会收到这样的异常:
**File "something.py", line 32, in <module>
rows = session.execute('some query execution', timeout=None)
File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 2141, in execute
return self.execute_async(query, parameters, trace, custom_payload, timeout, execution_profile, paging_state).result()
File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 4033, in result
raise self._final_exception
cassandra.ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'LOCAL_ONE'}**
为避免此异常,我已经尝试将默认超时设置为none,例如:
cluster.default_timeout = None
session.default_timeout = None
session.execute('some query execution', timeout=None)
但是,他们从来没有真正改变 Readtimeout 期限。
需要注意的一点是,当我在 Squrriel 中执行该查询命令时,它不会花费太长时间,大约 1.5 秒。
有谁知道如何解决这个问题?谢谢!
这里的关键信息是 Coordinator node timed out waiting for replica nodes' responses
- 这意味着超时发生在 Cassandra 内部。在您的情况下,请求不会直接转到拥有数据的节点,而是转到充当 Coordinator
的节点之一,然后该节点将请求重新发送到拥有数据的节点,并且在分配的时间内没有得到答复。
我记不太清楚了,但是 Python 驱动程序应该使用所谓的 TokenAware
负载平衡策略,这将使驱动程序直接向拥有数据的节点发送请求 - 你需要检查您是否使用此政策。
此外,您需要检查 Cassandra 节点上的日志以找出它们超时的原因,并在必要时调整这些节点上的超时。
每次我尝试使用 cassandra python 驱动程序获取查询时,我都会收到这样的异常:
**File "something.py", line 32, in <module>
rows = session.execute('some query execution', timeout=None)
File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 2141, in execute
return self.execute_async(query, parameters, trace, custom_payload, timeout, execution_profile, paging_state).result()
File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 4033, in result
raise self._final_exception
cassandra.ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'LOCAL_ONE'}**
为避免此异常,我已经尝试将默认超时设置为none,例如:
cluster.default_timeout = None
session.default_timeout = None
session.execute('some query execution', timeout=None)
但是,他们从来没有真正改变 Readtimeout 期限。
需要注意的一点是,当我在 Squrriel 中执行该查询命令时,它不会花费太长时间,大约 1.5 秒。
有谁知道如何解决这个问题?谢谢!
这里的关键信息是 Coordinator node timed out waiting for replica nodes' responses
- 这意味着超时发生在 Cassandra 内部。在您的情况下,请求不会直接转到拥有数据的节点,而是转到充当 Coordinator
的节点之一,然后该节点将请求重新发送到拥有数据的节点,并且在分配的时间内没有得到答复。
我记不太清楚了,但是 Python 驱动程序应该使用所谓的 TokenAware
负载平衡策略,这将使驱动程序直接向拥有数据的节点发送请求 - 你需要检查您是否使用此政策。
此外,您需要检查 Cassandra 节点上的日志以找出它们超时的原因,并在必要时调整这些节点上的超时。