Performance Apache Spark/Cassandra集群上的分区过多(任务过多)

Performance Apache Spark/Cassandra集群上的分区过多(任务过多),performance,cassandra,apache-spark,Performance,Cassandra,Apache Spark,我正在Spark/Cassandra集群上运行一个过于简单的应用程序。由于迁移到新环境(Spark 1.5而不是1.2,以及Cassandra版本的轻微升级),观察到性能大幅下降(对于相同的任务和相同的数据量,从4秒降至1-5米) 经过初步调查,似乎从spark driver的角度来看,对于完全相同的代码,生成了更多的任务(20+k,以前最多5个),执行器端的日志也反映了相同的情况: 在不同分区上多次连续执行同一查询: ... CassandraTableScanRDD: Fetched 0 r

我正在Spark/Cassandra集群上运行一个过于简单的应用程序。由于迁移到新环境(Spark 1.5而不是1.2,以及Cassandra版本的轻微升级),观察到性能大幅下降(对于相同的任务和相同的数据量,从4秒降至1-5米)

经过初步调查,似乎从spark driver的角度来看,对于完全相同的代码,生成了更多的任务(20+k,以前最多5个),执行器端的日志也反映了相同的情况:

在不同分区上多次连续执行同一查询:

...
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20324 in 0.138 s.
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20327 in 0.058 s.
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20329 in 0.053 s.
...
如果它以前是单一的:

CassandraTableScanRDD: Fetched 905 rows from x.y for partition 0 in 2.992 s.
由于应用程序代码是相同的,我想知道是什么导致了分区行为上的这种差异,以及可以采取什么措施来纠正这种差异

注意!两种环境的设置如果不同,配置不会共享/继承


谢谢。

新版本的Spark Cassandra连接器使用更现代的Cassandra内部的系统表来估计分割大小。此表每5分钟更新一次(当前为5分钟),尽管您看到的拆分数量非常大。从该表中读取的值除以分割大小

如果您使用的是C*小于2.1.5,则此表不存在,需要手动完成分区


如果继续看到问题,可以通过ReadConf手动传递拆分数量

相关信息:?您是否在cassandra的第二站使用了虚拟节点?