У меня проблемы с производительностью при записи искровых данных в cassandra. У меня проблемы с производительностью в двух случаях:
- Искра ленивая. Когда я вызываю «persist», Spark начинает выполнять «join», «groupBy», «partitionBy», «select», «filter». Я также использую UDFS.
Таблицы имеют от 30 до 900 миллионов строк (до объединения).
Операция «упорство» требует много времени.
- Кроме того, запись в Кассандру (коэффициент репликации = 3) требует много времени. В большинстве случаев я выполняю операции «добавления», а иногда я делаю «обновления».
У 3 базовых таблиц (до их объединения) не более 3 разделов_ключей и 2 кластеризации_ключей.
Разделы довольно маленькие (около 450 строк на раздел).
Что я могу сделать, чтобы увеличить производительность? Я попробовал несколько вещей, например создание вторичного индекса, запись только небольшого количества данных на кассандру (т.е.
Сначала я фильтрую данные, затем сохраняю их, а затем записываю результат в cassandra).
Я использую Spark (версия 1.6.2) для записи в Apache Cassandra 3.7 (один сервер с 16 ядрами и 499 ГБ ОЗУ).
Эта машина делится поровну на 4 виртуальных работника
каждый работник:
- 4 ядра (серверный процессор Intel (x86_64 с 2659 981 МГц))
- виртуальные машины
- 124,8 ГБ ОЗУ
- диск объемом 1 ТБ
- операционная система: CentOS Linux выпуск 7.3.1611
Другое дело, что иногда я получаю сообщение об ошибке «Недостаточно реплик, доступных для запроса при согласованности LOCAL_QUORUM (2 требуется, но только 1 работает)»,
при чтении данных (сохраняйте данные Cassandra на фрейме данных spark). Это происходит, потому что 1 реплика не найдена, хотя она существует. Почему эта проблема возникает при чтении, а не только при записи?
Или эта проблема возникает из-за тайм-аута кассандры? Иногда у меня также возникает эта проблема при записи искрового фрейма данных в Кассандру. Это происходит, потому что больше нельзя делать реплики?
Я использую коэффициент репликации 3.