2015-09-26 102 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