当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – Apache Spark / Cassandra集群上的分区过多(任务太多)

来源:互联网 收集:自由互联 发布时间:2021-06-22
我在Spark / Cassandra集群上运行一个简单的应用程序.自从迁移到新的环境(Spark 1.5而不是1.2以及Cassandra版本的次级升级)以来,观察到了相当大的性能降级(从4秒到1-5米,对于相同的任务和相同
我在Spark / Cassandra集群上运行一个简单的应用程序.自从迁移到新的环境(Spark 1.5而不是1.2以及Cassandra版本的次级升级)以来,观察到了相当大的性能降级(从4秒到1-5米,对于相同的任务和相同数量的数据).

经过初步调查后,从火花司机的角度看,对于完全相同的代码,还有更多的任务生成(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.

由于应用程序代码是相同的,我想知道什么可能导致分区行为的这种差异,以及可以做些什么来修复它?

NB!如果不同,则设置两个环境,不共享/继承配置.

谢谢.

新版本的Spark Cassandra Connector使用更现代的Cassandra内部的System表来估计分割大小.虽然您看到的分割数量非常大,但每个(当前为5分钟)更新此表.从此表中读取的值除以拆分大小.

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

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/FAQ.md#what-does-inputsplitsize_in_mb-use-to-determine-size

如果您继续查看问题,可以通过ReadConf手动传入拆分数.

网友评论