В ходе разработки продукта в области больших данных (Big Data) возникла потребность: при работе с гигантскими объемами данных на платформе пользователям необходимо выполнять агрегирующие запросы по разным таблицам, включая JOIN, GROUP BY, COUNT и т. п., и быстро получать результаты.
Сейчас основная цель — офлайновые данные; сценарии обработки в реальном времени временно не рассматриваются.
Текущий технологический стек — Big Data‑платформа CDH; вычисления выполняются на движках MapReduce или Spark, однако интерактивная обработка работает неидеально.
Анализ и соображения
Рассматриваемый кейс — типичный OLAP‑сценарий, где требуется быстрая аналитическая обработка на платформе больших данных. На рынке есть несколько подходящих решений, из которых обычно выбирают:
Хранение в формате Parquet на базе CDH + Impala для быстрых запросов по офлайновым данным (при наличии сценариев реального времени — связка Kudu + Impala).
Внедрение MPP (Massively Parallel Processing)‑движка, например Greenplum или StarRocks, которые могут работать независимо от экосистемы Hadoop.
Далее проведем проверку и сравнение трех вариантов: Parquet + Impala, Greenplum и StarRocks.
Сравнение решений и методика
Тестовые данные: две таблицы — SAD (7 000 000 строк) и ITEM (дочерняя таблица SAD, связь по SAD_ID, 3 000 000 строк).
Сценарий тестирования: операции JOIN + GROUP BY + ORDER BY.
Тестовые запросы: см. код (листинги не приводятся в данном документе).
a) Hive (Parquet) + Impala
Загрузка данных (Oracle → Hive): скрипты Sqoop + скрипты Hive.
Хранение в формате Parquet; исполнение запросов — через Impala.
b) Greenplum
Развертывание кластера: 1 master + 2 segment (узел standby не разворачивается).
Конфигурация узлов:
master |
segment |
|---|---|
|
CPU: 8 cores, 2.5 GHz Memory: DDR4, 64GB Hard Disk: 256GB SSD Network Card: Internal 10 Gigabit Ethernet Card Interconnection |
CPU: 8 cores, 2.5 GHz Memory: DDR4, 64GB Hard Disk: 256GB SSD Network Card: Internal 10 Gigabit Ethernet Card Interconnection |
Примечания по установке:
На всех трех узлах необходимо скорректировать параметры ядра ОС и установить требуемые компоненты.
Настроить доступ по SSH без пароля между всеми узлами.
Каталог хранения данных (например, /opt/) должен располагаться на соответствующем дисковом томе; владельцем назначить пользователя gpadmin и выдать ему все необходимые права.
Большинство операций выполняется с узла master (при настроенном SSH без пароля — удаленное управление узлами segment).
Greenplum основан на PostgreSQL. Базовые команды:
Запуск (под пользователем gpadmin на master): gpstart
Подключение: psql -d gp_sydb -h mpp-cluster-master -p 5432 -U gpadmin
Список БД: \l
Подключение к БД demo: \c demo
Список таблиц: \d
Выход: \q
Пример запроса: select count(1) from public."ITEM";
Остановка: gpstop
Загрузка данных (Oracle → Greenplum):
Используется инструмент CloudCanal, устанавливаемый на узел master. Для повышения производительности можно добавить sidecar‑узел на worker01.
Рекомендуется корректировать параметры задач, например fullbatchsize, подбирая их экспериментально для достижения оптимальной производительности.
c) StarRocks
Развертывание кластера: 1 FE + 3 BE (FE также используется как один из BE).
Конфигурация узлов:
fe |
be |
|---|---|
|
CPU: 8 cores, 2.5 GHz Memory: DDR4, 64GB Hard Disk: 256GB SSD Network Card: Internal 10 Gigabit Ethernet Card Interconnection |
CPU: 8 cores, 2.5 GHz Memory: DDR4, 64GB Hard Disk: 256GB SSD Network Card: Internal 10 Gigabit Ethernet Card Interconnection |
Примечания по установке:
Установочные пакеты необходимо скопировать на все три узла.
Настроить SSH‑доступ без пароля между всеми узлами.
Для запуска FE/BE требуется перейти под root.
Запуск FE (на master):
cd /data/software/fe/bin
bin/start_fe.sh --daemon
Подключение MySQL‑клиентом:
mysql -uroot -P 9030 -h 52.130.81.91
Пароль по умолчанию отсутствует.
Просмотр состояния FE:
show frontends \G
Запуск BE:
# master
cd /data/software/be/bin
bin/start_be.sh --daemon
# worker01
cd /data/software/be/bin
bin/start_be.sh --daemon
# worker02
cd /data/software/be/bin
bin/start_be.sh --daemon
Просмотр состояния BE:
show backends \G
Примечание по протоколу:
-
StarRocks использует MySQL‑совместимый протокол; команды схожи с MySQL. Пример:
mysql -uroot -P 9030 -h <ip>
Загрузка данных (Oracle → StarRocks):
Используется CloudCanal для миграции.
Типичная ошибка при выгрузке в StarRocks: Failed to flush data to StarRocks — требуется проверка параметров задачи (включая fullbatchsize), конфигурации целевой таблицы и сетевых настроек.
Результаты тестирования
По 10 прогонам каждого варианта (единицы соответствуют метрике исходного теста):
Category |
parquet+impala |
greenplum |
starrocks(test1) |
starrocks(test2) |
|---|---|---|---|---|
10 Test Results |
Test 1 Result: 1960 Test 2 Result: 2184 Test 3 Result: 1771 Test 4 Result: 2049 Test 5 Result: 1824 Test 6 Result: 2055 Test 7 Result: 1791 Test 8 Result: 2177 Test 9 Result: 2046 Test 10 Result: 2176 |
Test 1 Result: 1607 Test 2 Result: 1445 Test 3 Result: 1441 Test 4 Result: 1517 Test 5 Result: 1493 Test 6 Result: 1406 Test 7 Result: 1473 Test 8 Result: 1584 Test 9 Result: 1569 Test 10 Result: 1468 |
Test 1 Result: 3867 Test 2 Result: 820 Test 3 Result: 959 Test 4 Result: 2324 Test 5 Result: 976 Test 6 Result: 1439 Test 7 Result: 1889 Test 8 Result: 1253 Test 9 Result: 1215 Test 10 Result: 1133 |
Test 1 Result: 1446 Test 2 Result: 980 Test 3 Result: 1112 Test 4 Result: 1362 Test 5 Result: 901 Test 6 Result: 1126 Test 7 Result: 1322 Test 8 Result: 1199 Test 9 Result: 1420 Test 10 Result: 1480 |
Total Time of 10 Queries |
20040 |
15009 |
15880 |
12353 |
Выводы
Внедрение MPP‑движка действительно повышает производительность запросов: время выполнения одного запроса преимущественно находится в диапазоне 1–2 секунд.
В идентичной среде результаты отдельных прогонов Greenplum и StarRocks могут различаться, однако в среднем StarRocks показывает немного лучшую производительность.
Выбор конкретного решения имеет смысл делать, исходя из степени владения технологией и экосистемой команды, а также требований к интеграции с текущей инфраструктурой.