【问题标题】:Excessive partitioning (too many tasks) on Apache Spark/Cassandra clusterApache Spark/Cassandra 集群上的过度分区(太多任务)
【发布时间】:2015-10-01 23:55:50
【问题描述】:

我正在 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.

由于应用程序代码相同,我想知道是什么可能导致分区行为出现这种差异,以及可以采取哪些措施来补救?

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

谢谢。

【问题讨论】:

标签: performance cassandra apache-spark


【解决方案1】:

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

如果您使用低于 2.1.5 的 C*,则此表不存在,需要手动进行分区。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2017-02-10
    • 2020-09-27
    • 2019-01-18
    • 1970-01-01
    • 2021-02-23
    • 2018-08-24
    相关资源
    最近更新 更多