首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在consistency LOCAL_ONE上读取查询期间的Cassandra超时

在consistency LOCAL_ONE上读取查询期间的Cassandra超时
EN

Stack Overflow用户
提问于 2015-12-11 15:04:11
回答 1查看 1.4K关注 0票数 1

我有一个单节点的cassandra集群,32核CPU,32 of内存和3个SSD的RAID,总共大约2.5TB。我还有另一台32核32 on内存的主机,我在上面运行Apache Spark。

我在cassandra有一个巨大的历史数据,可能有600 in。每天大约有100多万张来自Kafka的新记录。我每天都需要查询这些新行。但是卡桑德拉失败了。我很困惑。

我的Cassandra表的方案是:

CREATE TABLE rainbow.activate ( rowkey text, qualifier text, act_date text, info text, log_time text, PRIMARY KEY (rowkey, qualifier) ) WITH CLUSTERING ORDER BY (qualifier ASC) AND bloom_filter_fp_chance = 0.01 AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'} AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99.0PERCENTILE'; CREATE INDEX activate_act_date_idx ON rainbow.activate (act_date); CREATE INDEX activate_log_time_idx ON rainbow.activate (log_time);

因为源数据可能包含一些重复的数据,所以我需要使用主键删除重复的记录。这个表上有两个索引,act_date是像'20151211‘这样的日期字符串,log_time是像'201512111452’这样的日期时间字符串,也就是说log_time更精细地分隔记录。

如果我使用log_time选择记录,cassandra就可以工作。但是使用act_date失败了。

首先,触发作业退出,并显示错误:

java.io.IOException: Exception during execution of SELECT "rowkey", "qualifier", "info" FROM "rainbow"."activate" WHERE token("rowkey") > ? AND token("rowkey") <= ? AND log_time = ? ALLOW FILTERING: All host(s) tried for query failed (tried: noah-cass01/192.168.1.124:9042 (com.datastax.driver.core.OperationTimedOutException: [noah-cass01/192.168.1.124:9042] Operation timed out))

我尝试将spark.cassandra.read.timeout_ms增加到60000。但是该作业发布了另一个错误,如下所示:

java.io.IOException: Exception during execution of SELECT "rowkey", "qualifier", "info" FROM "rainbow"."activate" WHERE token("rowkey") > ? AND token("rowkey") <= ? AND act_date = ? ALLOW FILTERING: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded)

我不知道如何解决这个问题,我读了spark-cassandra-connector上的文档,但我没有找到任何提示。

所以你能给我一些建议来帮助我解决这个问题吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-12-13 10:52:07

听起来像是一个不同寻常的设置。如果您有两台机器,那么将Cassandra配置为两个节点并在两个节点上运行Spark会更有效。这将分散数据负载,并在两台机器之间产生更少的流量。

每天摄取如此多的数据,然后查询这些数据的任意范围,听起来就像是一枚定时炸弹。当您开始频繁地收到超时错误时,这通常是一个低效模式的迹象,Cassandra不能以有效的方式完成您所请求的工作。

我看不出问题的具体原因,但我会考虑向分区键添加另一个字段,比如day,这样您就可以将查询限制在数据的较小子集上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34217868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档