Spark 的 Cassandra 数据聚合
Posted
技术标签:
【中文标题】Spark 的 Cassandra 数据聚合【英文标题】:Cassandra data aggregation by Spark 【发布时间】: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”来查看你的分区存储在哪里 【参考方案1】:Spark Cassandra 连接器有这个功能,它是SPARKC-25。您可以只创建一个带有值的任意 RDD,然后将其用作键源以从 Cassandra 表中获取数据。或者换句话说 - 将任意 RDD 加入 Cassandra RDD。在您的情况下,该任意 RDD 将包含 4 个具有不同负载均衡器值的元组。查看documentation 了解更多信息。 SCC 1.2 最近发布了,它可能与 Spark 1.1 兼容(不过它是为 Spark 1.2 设计的)。
【讨论】:
以上是关于Spark 的 Cassandra 数据聚合的主要内容,如果未能解决你的问题,请参考以下文章
在 Cassandra 中使用轻量级事务 (CAS) 时,我们如何避免丢失写入?