【问题标题】:Cassandra data aggregation by SparkSpark 的 Cassandra 数据聚合
【发布时间】: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


【解决方案1】:

Spark Cassandra 连接器有这个功能,它是SPARKC-25。您可以只创建一个带有值的任意 RDD,然后将其用作键源以从 Cassandra 表中获取数据。或者换句话说 - 将任意 RDD 加入 Cassandra RDD。在您的情况下,该任意 RDD 将包含 4 个具有不同负载均衡器值的元组。查看documentation 了解更多信息。 SCC 1.2 最近发布了,它可能与 Spark 1.1 兼容(不过它是为 Spark 1.2 设计的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2017-05-12
    • 2019-03-25
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多