12

我的环中有 5 个节点,其中SimpleTopologyStrategyreplication_factor=3。我使用压力工具插入了 1M 行。当我尝试使用 cqlsh 读取行数时

SELECT  count(*) FROM  Keyspace1.Standard1 limit 1000000;

它失败并出现错误:

请求未在 rpc_timeout 内完成。

它获取限制 100000。即使 500000 也失败。
我所有的节点都已启动。我需要增加rpc_timeout吗?

请帮忙。

4

3 回答 3

13

您收到此错误是因为请求在服务器端超时。应该知道,正如其他人所指出的,这在 Cassandra 中是一项非常昂贵的操作。

不过,如果您真的想这样做,您应该更新您的/etc/cassandra/cassandra.yaml文件并更改range_request_timeout_in_ms参数。这对您的所有范围查询都有效。

设置 40 秒超时的示例:

range_request_timeout_in_ms: 40000

您可能还必须在客户端进行调整。当cqlsh作为客户端使用时,这是通过在下创建/更新 cqlsh 的配置文件~/.cassandra/cqlshrc并将client_timeout参数添加到该connection部分来完成的。

设置 40 秒超时的示例:

[connection]
client_timeout=40
于 2015-08-13T16:11:31.017 回答
6

读取 1M 行需要很长时间,所以这可能就是它超时的原因。你不应该像这样使用 count ,它非常昂贵,因为它必须读取所有数据。如果您需要计算大量项目,请使用 Cassandra 计数器。

您还应该检查您的 Cassandra 日志以确认没有任何其他问题 - 有时 Cassandra 中的异常会导致客户端超时。

于 2013-03-06T08:08:10.530 回答
2

如果您可以接受近似的行数,请查看Cassandra 中列族的行数的答案。

于 2013-08-28T08:57:17.667 回答