Cassandra 卡桑德拉在读《星火》杂志的时候,脸上冒着汗

Cassandra 卡桑德拉在读《星火》杂志的时候,脸上冒着汗,cassandra,out-of-memory,spark-cassandra-connector,Cassandra,Out Of Memory,Spark Cassandra Connector,我试着用spark读取表格中的所有数据,做一个简单的计数 但是我集群中的一些Cassandra节点抛出java.lang.OutOfMemoryError。在此之后,我的spark作业停止,因为它无法再联系这些特定节点 一个简单的解决方案是增加堆内存量,但我认为这只是掩盖了真正的问题 堆转储显示在两个ArrayList中有许多SSTableScanner实例(7200),它们总共占内存的35%。第三大对象似乎是占总内存8%的缓存(org.apache.cassandra.cache.Concur

我试着用spark读取表格中的所有数据,做一个简单的计数

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

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

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

  • 我想知道我是否有这个问题,因为其中一行太宽了
    • (我知道我最大的分区是8G大)
  • 还是因为SSTABLE太多了。
    • (在4K和22K之间变化)
因为读取是按顺序进行的,所以我希望Cassandra不会一次加载每个
SSTable
,而是只加载它需要的那一个。但它也可能需要查看所有
SSTables
中的特定令牌范围

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

在普通情况下,拥有巨大的C*分区或巨大的SStable计数并不好,尤其是对于扫描请求而言

是的,我知道,但如果我无法读取数据,如何更改模式?正如我所说的,我的问题不是索引信息,而是SSTableScannerCompaction通常有帮助,特别是如果您可以临时增加内存限制,那么可以使用物化视图来重新排列模式以进行读取