卡桑德拉的 cqlsh 控制台中的操作超时错误

2022-09-03 17:43:17

我有一个三个节点Cassandra Cluster,我创建了一个超过2,000,000行的表。

当我在cqlsh中执行此()查询时,我得到了这个错误:select count(*) from userdetails

操作超时输出:错误={},last_host=192.168.1.2

当我运行计数函数的行数较少或限制为50,000时,它工作正常。


答案 1

count(*) 实际上遍历了所有数据。因此,没有限制的 a 预计会在有那么多行的情况下超时。这里有一些细节:http://planetcassandra.org/blog/counting-key-in-cassandra/select count(*) from userdetails

你可能需要考虑自己维护计数,使用Spark,或者如果你只是想要一个球场号码,你可以从JMX获取它。

要从JMX中获取,根据您的数据模型,它可能有点棘手。要获取分区数,请获取 mbean 并求和所有 90 个值(这是输出)。它只会给你sstables中存在的数字,所以为了更准确,你可以做一个刷新或尝试从mbean估计内存表中的数字。org.apache.cassandra.metrics:type=ColumnFamily,keyspace={{Keyspace}},scope={{Table​}},name=EstimatedColumnCountHistogramnodetool cfstatsMemtableColumnsCount

对于一个非常基本的大概数字,您可以从列出的所有范围中获取估计的分区计数(请注意,这只是一个节点上的数字)。将其乘以节点数,然后除以RF。system.size_estimates


答案 2

您还可以在 cqlsh 命令中增加超时,例如:

cqlsh --request-timeout 120 myhost

推荐