2015-09-26 66 views
1

我有3个Cassandra节点集群,有1个种子节点和1个火花主节点,以及3个从节点,有8个RAM和2个内核。这里是输入我的火花的工作创建分区太多的火花

spark.cassandra.input.split.size_in_mb 67108864 

当我与这个配置集我看到有周围89.1 MB的数据大致1706765记录的创建围绕768的分区上运行。我无法理解为什么会创建这么多的分区。我正在使用Cassandra Spark连接器版本1.4,因此该错误在输入拆分大小方面也是固定的。

只有11个唯一的分区键。我的分区键有总是测试的appname和总是从0-10的随机数,所以只有11个不同的唯一分区。

为什么有这么多的分区和怎么来的火花决定多少分区创建

+0

〜70 TB每分裂?真? :)什么是'sc.defaultParallelism'? – zero323

+0

总数据为89.1 MB,其中1706765分为768个分区 – Nipun

+0

sc.defaultParallelism是spark 1.4中的默认值,我没有在代码中设置任何地方 – Nipun

回答

2

卡桑德拉连接器不使用defaultParallelism。它检查C *中的系统表(2.1.5后)以估计给定表中有多少MB数据。读取该金额并除以输入拆分大小以确定拆分的数量。

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

如果你是C * < 2.1.5则需要通过ReadConf手动设置分区。

+0

我使用的是2.1.8。我的输入分割大小也非常高。我无法弄清为什么有这么多的分区。 – Nipun

+0

同时将我的数据增加到大约900万条记录,大约300 MB的数据RAM仍然是相同的分段数 – Nipun

+0

您检查了系统表吗?它为您正在阅读的桌子报告多少空间? – RussS