joinWithCassandraTable在增长的表大小上变慢了

时间:2015-08-27 13:08:18

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

我目前正在使用此堆栈:

  • Cassandra 2.2(多节点)
  • Spark / Streaming 1.4.1
  • Spark-Cassandra-Connector 1.4.0-M3

我有这个DStream [Ids],RDD计数大约6000-7000个元素。 id是分区密钥。

val ids: DStream[Ids] = ...
ids.joinWithCassandraTable(keyspace, tableName, joinColumns = SomeColumns("id"))

随着tableName越来越大,让我们说大约30k"行",查询需要更长时间,而且我无法保持在批量持续时间阈值之下。它的表现类似于使用大量IN - 条款,我理解这是不可取的。

有更有效的方法吗?

答案: 在与Cassandra进行连接之前,请务必记住使用repartitionByCassandraReplica对本地RDD进行重新分区,以确保每个分区仅针对本地Cassandra节点。在我的情况下,我还必须在加入本地RDD / DStream上增加分区,以便任务在工作人员之间均匀分布。

1 个答案:

答案 0 :(得分:3)

是" id"你桌子上的分区键?如果没有,我认为它必须是,否则你可能正在进行表扫描,随着表变大,它会逐渐变慢。

为了使用此方法获得良好性能,我相信您需要对ids RDD使用repartitionByCassandraReplica()操作,以便连接是每个节点上的本地操作。

请参阅this