Кассандра. Размер фильтра Блума › 16 ГБ, уменьшите bloom_filter_fp_chance

После восстановления данных в кластере Cassandra (1 узел) у меня ошибка:

ERROR [CompactionExecutor:7] 2016-05-09 08:05:38,621 CassandraDaemon.java:185 - Exception in thread Thread[CompactionExecutor:7,1,main]
java.lang.UnsupportedOperationException: Bloom filter size is > 16GB, reduce the bloom_filter_fp_chance
        at org.apache.cassandra.utils.obs.OffHeapBitSet.<init>(OffHeapBitSet.java:40) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.utils.FilterFactory.createFilter(FilterFactory.java:85) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.utils.FilterFactory.getFilter(FilterFactory.java:78) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.io.sstable.format.big.BigTableWriter$IndexWriter.<init>(BigTableWriter.java:470) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.io.sstable.format.big.BigTableWriter.<init>(BigTableWriter.java:86) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.io.sstable.format.big.BigFormat$WriterFactory.open(BigFormat.java:107) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.io.sstable.format.SSTableWriter.create(SSTableWriter.java:84) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.writers.DefaultCompactionWriter.<init>(DefaultCompactionWriter.java:52) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.CompactionTask.getCompactionAwareWriter(CompactionTask.java:237) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.CompactionTask.runMayThrow(CompactionTask.java:174) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:74) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionCandidate.run(CompactionManager.java:256) ~[apache-cassandra-2.2.5.jar:2.2.5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_71]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_71]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_71]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_71]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_71]

Есть идеи, как это можно исправить?

Средний размер sstable (файл db) составляет 524 МБ. Максимум. размер 167G

Bloom filter false positives: 0
Bloom filter false ratio: 0.00000
Bloom filter space used: 8409389240
Bloom filter off heap memory used: 59948996312

person Dimaf    schedule 09.05.2016    source источник


Ответы (1)


Приближенная формула для вероятности ложного срабатывания фильтра Блума в зависимости от пространства:

m = n * ln(1/fpc)/ln(2)²

m = размер в байтах n = количество различных ключей раздела fpc = вероятность ложного срабатывания фильтра Блума

см. http://www.slideshare.net/doanduyhai/cassandra-data-structures-and-algorithms/57 для деталей математики

Чтобы фильтр Блума имел размер 16 ГБ, вероятно, у вас много разделов в одном SSTable (и, возможно, очень большом SSTable).

Не могли бы вы:

  1. укажите средний и максимальный размер ваших SSTables?
  2. дать шанс fp фильтру Блума, настроенному для таблицы, которая вызывает проблему (используйте nodetool cfstats или nodetool tablestats)
person doanduyhai    schedule 09.05.2016
comment
Спасибо за ваш ответ. Я добавил информацию. - person Dimaf; 09.05.2016
comment
У меня нет bloom_filter_fp_chance, можете ли вы получить его на столе, используя DESCRIBE TABLE xxx в cqlsh? - person doanduyhai; 09.05.2016
comment
Похоже, у вас есть 1,79 * 10 ^ 9 разделов в большом SSTable (используя математическую формулу выше). Одно из предложений состоит в том, чтобы увеличить шанс fp фильтра Блума до 0,1. Это уменьшит размер фильтра Блума в 2 раза, например. ≈ 8Гб - person doanduyhai; 10.05.2016
comment
Спасибо! Ошибка не появилась. - person Dimaf; 11.05.2016