Подходы к аналитике таблиц Cassandra?

У меня есть требование выполнить фильтрацию и сортировку в реальном времени по относительно большому разделу в таблице C * ~ 2-3 миллиарда строк с более чем сотней столбцов в каждой. Должна быть возможность фильтровать и сортировать любую комбинацию столбцов. Мы попробовали Apache Solr (DataStax Enterprise 4.8) для такой работы, но столкнулись со следующими проблемами:

  • Solr-индексы плохо работают при частых и массовых обновлениях данных
  • Иногда Solr просто не перестраивает индексы (ждал часами)
  • Solr может читать только с CL=ONE, поэтому данные могут быть несогласованными

Так что теперь мы ищем другие подходы. Сейчас мы пробуем Apache Spark 1.4. Но похоже, что производительность сортировки неудовлетворительна - около 1,5 мин на 2 млрд строк (наша цель ~ 1-2 сек). Возможно, мы делаем что-то не так, так как находимся в самом начале обучения Spark. Также я понимаю, что производительность может быть лучше с большим количеством процессорных ядер и памяти.

Сегодня я прочитал об Apache Inginte с индексацией в памяти. Возможно, это лучший инструмент для нашего случая?

Так что теперь я просто ищу предложение инструмента для выполнения такой работы.

Спасибо.

PS: DataStax Enterprise 4.8, Apache Cassandra 2.1.9.791, Apache Solr 4.10.3.1.172, Apache Spark 1.4.1.1.


person sedovav    schedule 24.05.2016    source источник


Ответы (3)


Я думаю, что ваши подходы являются лучшими, которые вы можете получить. Либо Spark (например, SparkSQL), либо сетка данных в памяти, такая как Ignite. Оба будут делать одно и то же - помещать все в память, перемешивать и нарезать данные. http://velvia.github.io/Subsecond-Joins-in-Spark-Cassandra/ Flink — еще один вариант для рассмотрения, но он ничем не отличается от Spark.

С другой стороны, 2-3 миллиарда строк должны соответствовать БД Postgres или чему-то подобному. Проверьте, не достаточно ли вам.

В мире Hadoop у вас есть Hive (медленный и стабильный), Impala (быстрый и требовательный к памяти) или снова Spark. Но с Кассандрой это не сработает. И я не верю, что ваши данные достаточно велики, чтобы учитывать среду Hadoop (стоимость обслуживания).

person Piotr Gwiazda    schedule 19.06.2018

Извините, но сортировка по 2 миллиардам строк с более чем сотней столбцов за 2 секунды. Думаю, это будет большой вызов. Я имею в виду, что у вас есть 200 миллиардов столбцов. Рекомендуется не более 2 миллиардов на ключ раздела. И я думаю, что 2 миллиарда на раздел слишком много. Если вам нужна лучшая производительность искры, вы должны найти узкое место. Можешь написать немного больше о своей установке? Сколько у вас узлов cassandra? Сколько узлов Spark? Характеристики оборудования?

person Citrullin    schedule 24.05.2016
comment
На данный момент мы тестируем его в среде песочницы ~ DC1 с 4 узлами Cassandra и DC2 с 2 узлами Spark. Каждый узел имеет 16 Гб памяти и 8 процессоров по 2500 МГц. - person sedovav; 24.05.2016

Apache Ignite имеет полную поддержку SQL с индексами, которые вы можете использовать для повышения производительности в вашем случае. Я бы обязательно попробовал.

Подробнее см. на этой странице: https://apacheignite.readme.io/docs/sql-queries< /а>

person Valentin Kulichenko    schedule 25.05.2016