我目前正在使用这个堆栈:
我得到了这个RDDs计数约6000-7000元素的DStreamIds。id是分区密钥。
val ids: DStream[Ids] = ...
ids.joinWithCassandraTable(keyspace, tableName, joinColumns = SomeColumns("id"))随着tableName变得更大,比方说大约30k的“行”,查询所需的时间要长得多,而且我在批处理持续时间阈值以下有困难。它的性能类似于使用大型IN-clause,我知道这是不可取的。
是否有更有效的方法来做到这一点?
答:在加入Cassandra之前,一定要记住用repartitionByCassandraReplica重新划分本地RDDs,以确保每个分区只对本地Cassandra节点工作。在我的例子中,我还必须在加入本地RDD/DStream上增加分区,这样任务才能均匀地分布在工人之间。
发布于 2015-08-27 18:21:56
在您的表中"id“是分区键吗?如果不是,我认为应该是这样,否则您可能正在进行一次表扫描,这将随着表的变大而逐渐变慢。
而且,为了获得良好的性能,我相信您需要在您的ids上使用repartitionByCassandraReplica()操作,以便联接是每个节点上的一个本地操作。
见这。
https://stackoverflow.com/questions/32250271
复制相似问题