我目前正在使用这个堆栈:
- 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 上的分区,以便任务在工作人员之间均匀分布。