Cassandra问题v3.11.3 ...从table1中选择count(*)

时间:2018-12-12 14:09:23

标签: cassandra-3.0

我在一个表中导入了1个以上的核心记录,当我选择查询计数(*)时,它给了我错误。我知道这是一个代价高昂的查询,但是,有谁能帮我找到相同的解决方案。

从TABLE1中选择COUNT(*);

错误:OperationTimedOut:错误= {'10.20.30.10':'客户端请求超时。参见Session.execute_async'},last_host = 10.20.30.10

2 个答案:

答案 0 :(得分:1)

执行多次研发后,我得到了count(*)问题的解决方案。

步骤:

  1. 在Cassandra群集上设置presto(我使用了presto-server-0.215版本(presto-server-0.215.tar.gz和jdk:jdk-8u151-linux-x64.tar.gz)) 1.1。 presto-server-0.215.tar.gz:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.215/ 1.2。 jdk-8u151-linux-x64.tar.gz:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
  2. 将presto安装在一台cassandra服务器上,这将使其成为协调器,并且群集中的其余节点将成为工作服务器,请参考以下URL设置presto。 引用网址:https://github.com/prestodb/presto/issues/3382
  3. 您需要为config.properties文件中提到的Presto端口添加防火墙规则(我正在使用RHEL 7.x OS)
  4. 在launcher.py中进行更改--->安装的jdk的行号'214'路径为“命令= ['/opt/jdk1.8.0_151/bin/java','-cp',类路径]“
  5. 启动presto ---> ./launcher启动
  6. 打开presto控制台http://localhost:8081,您应该在控制台中看到协调器节点和辅助节点。

  7. 下载“ presto-cli-0.215-executable.jar”(URL:https://prestodb.io/docs/current/installation/cli.html)并将其重命名为prestocli(获得755许可),然后使用'测试大表的count(*)。 prestocli'表有75个Lakhs记录,当我们在cqlsh中运行时给出错误。 7.1。 CQLSH错误:来自服务器的错误:code = 1200 [协调器节点等待副本节点的响应超时] message =“操作超时-仅收到0个响应。” info = {'received_responses':0,'required_responses':1,'consistency':'ONE'}

  8. 下面是count(*)...的解决方案...

[root @ casdb01 bin]#./prestocli --server本地主机:8081 presto>从cassandra.datamart.big_table中选择count(*);

_col0

7587418 (1行)

查询20190118_070908_00005_38tiw,已完成,1个节点 拆分:总计1,298,已完成1,298(100.00%) 0:53 [759万行,7.24MB] [142K行/秒,139KB /秒]

  1. 对于任何应用程序查询,您都可以保存为执行count(*)的接口。

特别感谢我遇到的帮助我获得这一结果的团队(Venkatesh Bhat)。

答案 1 :(得分:0)

因此,如果这不是生产系统,那么您似乎已经意识到了。

> cqlsh --request-timeout=3600
SELECT count(*) FROM table1 ALLOW FILTERING;

您的系统正在超时,因为查询成本很高,这就是您的错误所在。您可以延长超时时间来解决此问题,但是如果您的数据集足够大,cassandra有时将无法返回。另外,您可能希望以ONE的一致性运行查询,以免触发读取压缩,并且查询返回速度更快。当然,它将不那么准确。

您也可以尝试:nodetool cfstats mykeyspace只是一个估计,但总比没有好。