【发布时间】:2015-05-19 14:07:20
【问题描述】:
我想通过cassandra spark 连接器使用服务器端数据选择和过滤。事实上,我们有许多传感器每 1 秒发送一次值,我们对这些使用月、日、小时等的数据聚合感兴趣,
我提出了以下数据模型:
CREATE TABLE project1(
year int,
month int,
load_balancer int,
day int,
hour int,
estimation_time timestamp,
sensor_id int,
value double,
...
PRIMARY KEY ((year, month, load_balancer), day, hour, estimation_time, sensor_id)
然后,我们有兴趣获取 2014 年 12 月 - 负载均衡器 IN (0,1,2,3) 的数据聚合。所以它们是4 个不同的分区。
我们使用的是cassandra spark 连接器版本 1.1.1,并且我们使用按查询组合来获取按小时聚合的所有值。
所以对于 4,341,390 个元组的处理时间,spark 需要 11 分钟才能返回结果。 现在的问题是我们使用 5 个节点,但是 spark 只使用一个工作人员来执行任务。 您能否建议更新查询或数据模型以提高性能?
【问题讨论】:
-
你找到解决办法了吗?
-
当使用 sensor_id 作为分区键时,将使用所有节点(我们大约有 500 个传感器)。但是,在提议的模型中,我不知道为什么它们不是 4 个工作。可能是因为他们在同一个节点!
-
您是否确认您的数据仅存储在 1 个节点上? (这听起来很奇怪和不平衡)你也可以显示你的火花代码吗?
-
@Zerd1984 如何检查数据是否在一个节点中?如果是跟踪 cassandra 查询,我认为它是分布式的。 Cassandra trace 。关于 Spark 代码,我正在使用这个code
-
@Wassim 你可以使用“nodetool getendpoints keyspace table partitionkey”来查看你的分区存储在哪里
标签: java cassandra apache-spark cassandra-2.0