Извлечение миллионов записей из cassandra с использованием искры в проблеме с производительностью scala

Я пробовал кластер с одним узлом и кластер с 3 узлами на своем локальном компьютере, чтобы получить 2,5 миллиона записей из cassandra с помощью искры, но в обоих сценариях это занимает 30 секунд только для SELECT COUNT(*) from table. Мне нужен этот и другие аналогичные счетчики для аналитики в реальном времени.

SparkSession.builder().getOrCreate().sql("SELECT COUNT(*) FROM data").show()

person zubinbhasingrazitti    schedule 31.07.2019    source источник


Ответы (2)


Cassandra не предназначена для перебора всего набора данных в одном дорогостоящем запросе, подобном этому. Если в data есть 10 петабайт, например, этот запрос потребует чтения 10 петабайт с диска, переноса их в память, потоковой передачи координатору, который разрешит захоронения/дедупликацию (вы не можете просто заставить каждую реплику отправлять счетчик, иначе вы сильно недооцените/ пересчитать) и увеличить счетчик. Это не сработает в 5-секундном тайм-ауте. Вы можете использовать функции агрегации для небольших фрагментов данных, но не в одном запросе.

Если вы действительно хотите, чтобы это работало так, запросите таблицу system.size_estimates каждого узла и для каждого диапазона разделите в соответствии с размером, чтобы вы получили приблизительный максимум, скажем, 5k за чтение. Затем введите count(*) для каждого с ограничением TOKEN для каждого из разделенных диапазонов и объедините значение всех этих запросов. Вот как коннектор spark выполняет полное сканирование таблицы в SELECT * rrds, поэтому вам просто нужно воспроизвести это.

Самый простой и, вероятно, более безопасный и точный (но менее эффективный) — использовать spark, чтобы просто прочитать весь набор данных, а затем подсчитать, не используя функцию агрегирования.

person Chris Lohfink    schedule 01.08.2019

Сколько времени нужно, чтобы выполнить этот запрос напрямую без Spark? Я думаю, что распараллелить запросы COUNT невозможно, поэтому использование Spark для выполнения таких запросов не принесет вам пользы.

person simpadjo    schedule 31.07.2019
comment
Я не могу считать без искры и напрямую на Cqlsh из-за тайм-аута. - person zubinbhasingrazitti; 31.07.2019
comment
Затем вы должны исправить свои настройки cqlsh. См. stackoverflow.com/a/40053579/5385041. - person simpadjo; 31.07.2019
comment
увеличение настроек тайм-аута для этого - плохая идея в cassandra - person Chris Lohfink; 01.08.2019