Cassandra CQLSH OperationTimedOut错误=客户端请求超时。请参见Session.execute [_async](超时)

问题描述 投票:13回答:4

我想将数据从一个Cassandra集群(通过192.168.0.200到达)传输到另一个Cassandra集群(通过127.0.0.1到达)。数据为523行,但每行约为1 MB。我正在使用COPY FROM和COPY TO命令。发出COPY TO命令时出现以下错误:

Error for (8948428671687021382, 9075041744804640605):
OperationTimedOut - errors={
'192.168.0.200': 'Client request timeout. See Session.execute[_async](timeout)'},
last_host=192.168.0.200 (will try again later attempt 1 of 5).

我试图将~/.cassandra/cqlshrc文件更改为:

[connection]
client_timeout = 5000

但这没有帮助。

cassandra timeout cqlsh operation
4个回答
2
投票

目前尚不清楚你在这里使用哪个版本的Cassandra,所以我假设3.0.x

COPY功能很好,但并不总是最好的选择(即如果你有很多数据),不过对于这个,你可能想检查你的cassandra中的一些timeout settings

这里的文档显示了pagetimeout设置也可以帮助你。

在两个集群之间移动数据可以通过许多其他方式完成。您可以使用以下任何一项:

  1. sstableloader
  2. 其中一个驱动程序,如java driver
  3. 使用spark将数据从一个集群复制到另一个集群,like in this example
  4. 使用OpsCenter到clone a cluster
  5. cassandra bulk loader(我认识很多人使用这个)

当然#3和#4需要DSE cassandra,但它只是为了给你一个想法。我不确定您是否使用Apache Cassandra或Datastax Enterprise Cassandra。

无论如何,希望这有帮助!


15
投票

您可能希望增加请求超时(默认值:10秒),而不是连接超时。

尝试:

cqlsh --request-timeout=6000

或添加:

[connection]
request_timeout = 6000

到你的~/.cassandra/cqlshrc文件。


4
投票

关于复制超时,正确的方法是使用已指向的PAGETIMEOUT参数。

使用PAGETIMEOUT = 10000将keypace.table复制到'/ dev / null';

尝试使用cqlsh设置--request-timeout = 6000在这种情况下无济于事。


1
投票

嗨除了以下,

1.检查墓碑 在cassandra中,逻辑删除降低了读取的性能,并且发生以下问题:OperationTimedOut:errors = {'127.0.0.1':'客户端请求超时。请参见Session.execute_async'},last_host = 127.0.0.1 注意 当我们在列中使用空值插入数据时,它会创建一个逻辑删除。我们需要避免在表中插入null。 有许多选项可供使用,例如未设置(https://docs.datastax.com/en/latest-csharp-driver-api/html/T_Cassandra_Unset.htm)和spark中的ignoreNulls(https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md)属性。 您可以使用以下命令检查表状态 nodetool tablestats keyspace1.tablename

2.删除墓碑 如果您在单个节点上工作,则可以通过更改表来删除逻辑删除表ALTER表keyspace1.tablename WITH gc_grace_seconds ='0';

3.read_request_timeout_in_ms:配置cassandra.yaml文件中的值以增加读取请求的超时

© www.soinside.com 2019 - 2024. All rights reserved.