从 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%。
- 我想知道我是否遇到了这个问题,因为其中一行太宽了
- (我知道我最大的分区是8G大)。
- 还是因为SSTable太多了。
- (在 4K 和 22K 之间变化)
因为读取是顺序的,所以我希望 Cassandra 不会一次加载每个 SSTable
,而是只加载它需要的那个。但也有可能它必须查看所有 SSTables
.
中的特定标记范围
是否有可以识别潜在问题的东西,或者在内存中保留更少 SSTable
的特殊配置?
你很可能中了
https://issues.apache.org/jira/browse/CASSANDRA-9754
拥有巨大的 C* 分区或巨大的 SStable 数量在常见情况下并不好,特别是对于扫描请求
我正在尝试使用 spark 读取 table 的所有数据以进行简单计数。
但是我集群中的一些 Cassandra 节点抛出 java.lang.OutOfMemoryError
。在此之后,我的 spark 作业停止了,因为它无法再联系这些特定节点。
一个简单的解决方案是增加堆内存的数量,但我认为它只是掩盖了真正的问题。
heap dump 显示两个 ArrayList
中有很多 SSTableScanner
个实例 (7200),总共占内存的 35%。第三大对象似乎是缓存(org.apache.cassandra.cache.ConcurrentLinkedHashCache),占总内存的 8%。
- 我想知道我是否遇到了这个问题,因为其中一行太宽了
- (我知道我最大的分区是8G大)。
- 还是因为SSTable太多了。
- (在 4K 和 22K 之间变化)
因为读取是顺序的,所以我希望 Cassandra 不会一次加载每个 SSTable
,而是只加载它需要的那个。但也有可能它必须查看所有 SSTables
.
是否有可以识别潜在问题的东西,或者在内存中保留更少 SSTable
的特殊配置?
你很可能中了 https://issues.apache.org/jira/browse/CASSANDRA-9754 拥有巨大的 C* 分区或巨大的 SStable 数量在常见情况下并不好,特别是对于扫描请求