4

我目前正在使用这个堆栈:

  • Cassandra 2.2(多节点)
  • 火花/流媒体 1.4.1
  • Spark-Cassandra-连接器 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 进行连接之前,请务必记住重新分区您的本地 RDD,repartitionByCassandraReplica以确保每个分区仅针对本地 Cassandra 节点工作。就我而言,我还必须增加加入本地 RDD/DStream 上的分区,以便任务在工作人员之间均匀分布。

4

1 回答 1

3

“id”是表中的分区键吗?如果没有,我认为它需要这样做,否则您可能正在执行表扫描,随着表变大,运行速度会逐渐变慢。

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

看到这个

于 2015-08-27T18:21:56.720 回答