从 spark 读取数据时,Cassandra 正在 OOMing

Cassandra is OOMing when reading from spark

我正在尝试使用 spark 读取 table 的所有数据以进行简单计数。

但是我集群中的一些 Cassandra 节点抛出 java.lang.OutOfMemoryError。在此之后,我的 spark 作业停止了,因为它无法再联系这些特定节点。

一个简单的解决方案是增加堆内存的数量,但我认为它只是掩盖了真正的问题。

heap dump 显示两个 ArrayList 中有很多 SSTableScanner 个实例 (7200),总共占内存的 35%。第三大对象似乎是缓存(org.apache.cassandra.cache.ConcurrentLinkedHashCache),占总内存的 8%。

因为读取是顺序的,所以我希望 Cassandra 不会一次加载每个 SSTable,而是只加载它需要的那个。但也有可能它必须查看所有 SSTables.

中的特定标记范围

是否有可以识别潜在问题的东西,或者在内存中保留更少 SSTable 的特殊配置?

你很可能中了 https://issues.apache.org/jira/browse/CASSANDRA-9754 拥有巨大的 C* 分区或巨大的 SStable 数量在常见情况下并不好,特别是对于扫描请求