【问题标题】:Perfomance related question on spark + cassandra (JAVA code)spark + cassandra 上的性能相关问题(JAVA 代码)
【发布时间】:2020-11-10 21:34:20
【问题描述】:

我使用 cassandra 作为我的垃圾场,我有多个作业正在运行以处理数据和更新不同的系统。以下是与工作相关的过滤器

作业1.基于active_flag和update_date_time和expiry_time的数据过滤并处理过滤后的数据。

工作2.基于update_date_time的数据过滤处理数据

Job 3. 基于 created_date_time 和 active flag 的数据过滤

运行条件的db列是(一个查询中的一列或多列)

  1. 活动 -> 是/否
  2. created_date -> 时间戳
  3. expiry_time -> 时间戳
  4. updated_date -> 时间戳

我对这些条件的问题:-

  1. 我应该如何形成我的 cassandra 主键?因为我看不到任何方法可以实现这一点的唯一性(存在 ID,但我不需要处理数据)。

  2. 如果我使用表扫描对 Spark 代码进行过滤,我什至需要主键吗?

考虑到处理数百万条记录。

【问题讨论】:

    标签: apache-spark cassandra spark-cassandra-connector


    【解决方案1】:

    回答您的问题 - 您需要有一个主键,即使它仅包含分区键 :-)

    更详细的答案实际上取决于这些作业的运行频率、总体数据量、集群中有多少节点、使用什么硬件等。通常,我们会尝试将尽可能多的过滤推送到 Cassandra ,所以它只会返回相关数据,而不是所有数据。最有效的过滤发生在第一个聚类列上,例如,如果我只想处理新创建的条目,那么我可以使用具有以下结构的表:

    create table test.test (
      pk int,
      tm timestamp,
      c2 int,
      v1 int,
      v2 int,
      primary key(pk, tm, c2));
    

    然后我可以使用以下方法仅获取新创建的条目:

    import org.apache.spark.sql.cassandra._
    val data = spark.read.cassandraFormat("test", "test").load()
    val filtered = data.filter("tm >= cast('2019-03-10T14:41:34.373+0000' as timestamp)")
    

    或者我可以在给定的时间段内获取条目:

    val filtered = data.filter("""ts >= cast('2019-03-10T14:41:34.373+0000' as timestamp)
      AND ts <= cast('2019-03-10T19:01:56.316+0000' as timestamp)""")
    

    可以通过在数据帧上执行explain 来检查过滤器下推的效果,并检查PushedFilters 部分 - 标有* 的条件将在Cassandra 端执行...

    但并非总是可以设计表来匹配所有查询,因此您需要为最常执行的作业设计主键。在您的情况下,update_date_time 可能是一个很好的候选者,但是如果您将它作为聚类列,那么在更新它时需要小心 - 您需要批量执行更改,如下所示:

    begin batch
    delete from table where pk = ... and update_date_time = old_timestamp;
    insert into table (pk, update_date_time, ...) values (..., new_timestamp, ...);
    apply batch;
    

    或类似的东西。

    【讨论】:

    • 感谢您的详细解释。我最终完全按照你上面所说的做了。 id 是在内存中加载数据时使用的主键和下推过滤器
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2012-04-09
    • 2015-04-05
    • 2016-11-29
    • 2011-09-07
    • 2015-09-13
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多