
В последнее время многие российские компании столкнулись с задачей по выстраиванию системы бизнес-аналитики на новом технологическом стеке. В качестве замены Tableau, Power BI и Qlik одни рассматривают BI-решения российских вендоров — с лицензионной поддержкой, постоянными обновлениями версий и возможностью влиять на roadmap. Другие — Open-Source-инструменты: они бесплатны, однако их придётся развертывать, настраивать и администрировать своими силами. Один из таких инструментов — Apache Superset.
Мы расскажем о способах развёртывания Apache Superset на разных платформах (Docker, ВМ, Kubernetes), а также дадим подробные инструкции на примере облака VK Cloud.
Особенности Apache Superset
Apache Superset — Open-Source-инструмент для сбора, обработки и визуализации данных. Он содержит необходимую базовую функциональность для разработки BI-решений.
В числе достоинств Apache Superset:
- Большой набор типов визуализации данных, возможность создавать дашборды и отчёты с использованием преднастроенных шаблонов.
- Возможность добавления пользовательских плагинов для создания дашбордов.
- Расширяемая модель безопасности, которая позволяет гибко настраивать права доступа к функциональности продукта и данным.
- Встроенное асинхронное выполнение запросов и кеширование.
- Возможность настройки Single Sign-On (технология единого входа) для разных приложений с Superset.
- Гибкое масштабирование и возможность обработки больших объёмов данных без снижения производительности.
- Расширенная совместимость с базами данных: ClickHouse, Greenplum, PostgreSQL и не только.
Но Superset не панацея. У инструмента есть и недостатки:
- Высокие требования к компетенции специалистов — для подготовки данных и администрирования Superset нужен релевантный опыт.
- Для работы с Apache Superset потребуется отдельно разворачивать, настраивать и поддерживать сторонние БД, а также использовать ПО для подготовки сырых данных и построения витрин данных.
- Отсутствие технической поддержки, подробной документации. Здесь нет привычной поддержки вендора, задачи по доработке и расширению функциональности решает пользователь.
- Сложность создания кастомных плагинов и поддержки их стабильной работы при обновлении ПО.
Вместе с тем Apache Superset адаптирован для работы в облаке, масштабирования в больших распределённых средах и хорошо работает внутри контейнеров. Это гибкий в настройке инструмент, который позволяет выбирать:
- веб-сервер (Gunicorn, Nginx, Apache);
- механизм базы данных с метаданными (MySQL, Postgres, MariaDB);
- очередь сообщений (Redis, RabbitMQ, SQS);
- серверную часть результатов (S3, Redis, Memcached);
- уровень кеширования (Memcached, Redis).
Есть разные способы развертывания Apache Superset в облаке: в Docker, Kubernetes (k8s), на виртуальных машинах. Мы подготовили подробные инструкции для каждого из способов на примере развёртывания в облаке VK Cloud.
Развёртывание Apache Superset в облаке VK Cloud
Для любого из выбранных способов развёртывания Apache Superset потребуется аккаунт в VK Cloud.
- Перейдем на https://mcs.mail.ru/.
- Нажимаем «Регистрация».
- Указываем необходимые данные для регистрации.
- Входим в личный кабинет VK Cloud.
Развёртывание Apache Superset в Docker
Это простой способ, особенно с учётом того, что у многих разработчиков Docker уже установлен. Важно помнить, что Docker плохо масштабируется, не подходит для высоких нагрузок и не способен обеспечить высокую доступность. Поэтому вариант с развёртыванием Apache Superset в Docker больше подходит для быстрых тестов, а не для продакшена.
Инструкция по развёртыванию в Docker
1. Заходим в личный кабинет VK Cloud.
2. В разделе «Облачные вычисления» переходим в подраздел «Виртуальные машины».
3. Создаём виртуальную машину с нужной операционной системой, например Debian. В процессе указываем все необходимые характеристики, для тестирования можно назначить внешний IP-адрес для подключения по SSH. Важно: Нужно сразу добавить группу безопасности для подключения со своего IP-адреса, как минимум открыть порты 8088 и 22.
4. Подключимся к виртуальной машине по SSH. Информация для подключения и инструкция доступны на странице виртуальной машины в личном кабинете.
5. Устанавливаем Docker и Git:
sudo apt update
sudo apt install git
6. Устанавливаем Docker по инструкции с официального сайта (пример для Debian): https://docs.docker.com/engine/install/debian/.
7. Клонируем репозиторий с Apache Superset:
git clone https://github.com/apache/superset.git
8. Переходим в папку superset:
cd superset
9. Подтягиваем необходимые контейнеры в Docker:
sudo docker compose -f docker-compose-non-dev.yml pull
10. Запускаем контейнеры:
sudo docker compose -f docker-compose-non-dev.yml up
11. Через несколько минут интерфейс Apache Superset будет доступен по адресу:
http://{внешний ip-адрес виртуальной машины}:8088/
12. По умолчанию: логин — admin, пароль — admin.
Для подключения к PostgreSQL и ArenadataDB коннектор уже будет установлен по умолчанию. Чтобы подключиться к ClickHouse, надо установить коннектор, который рекомендован в документации ClickHouse.
1. Заходим в окна терминала с запущенным Apache Superset, нажимаем Ctrl+C.
2. В файле superset/docker/requirements-local.txt прописываем в зависимости пакет clickhouse-connect. Это можно сделать следующей командой:
echo "clickhouse-connect" >> docker/requirements-local.txt
3. Повторно запускаем:
sudo docker compose -f docker-compose-non-dev.yml up
4. При подключении к базе данных теперь можно будет выбрать «Clickhouse Connect». На следующем этапе лучше выбрать «Connect this database with a SQLAlchemy URI string instead» и указать строку подключения к ClickHouse:
clickhousedb://{имя_пользователя_clickhouse}:{пароль_clickhouse}@{адрес_clickhouse}:{порт_clickhouse}/{база_данных_ClickHouse}
Развёртывание Apache Superset на виртуальных машинах
Вариант с развёртыванием Apache Superset на виртуальных машинах — переходный, промежуточный. С одной стороны, он простой: можно всё установить на одной ВМ, подключить облачную базу данных (DBaaS, Database as a service) и развернуть Superset. С другой стороны, производительности одной ВМ не хватит для полноценной работы Superset, то есть для запуска решения под продакшен надо создавать несколько виртуальных машин и настраивать кластер.
Инструкция по развёртыванию на ВМ
Для развёртывания Apache Superset на виртуальной машине будем использовать виртуальную машину с Debian 11. Для корректной работы последних версий Apache Superset требуется версия Python не ниже 3.8. На версиях 3.7 и ниже возникает большое количество проблем с зависимостями и Superset не будет запускаться. Текущую версию можно посмотреть командой:
python3 -V
1. Первым шагом устанавливаем необходимые библиотеки:
sudo apt update
sudo apt-get install build-essential libssl-dev libffi-dev
python3-dev python3-pip libsasl2-dev libldap2-dev
default-libmysqlclient-dev
2. Далее обновляем pip:
pip3 install --upgrade pip
3. Используем виртуальное окружение Python:
python3 -m pip install virtualenv
4. Активируем виртуальное окружение Python:
python3 -m venv superset
. superset/bin/activate
5. Устанавливаем необходимые зависимости:
pip install --upgrade pip
pip install werkzeug==2.0.3
pip install flask==2.1.3
pip install wtforms==2.3.0
pip install --upgrade pyopenssl
pip install psycopg2-binary pillow gunicorn gevent
6. Добавляем коннекторы для подключения к нужным СУБД. Для этого устанавливаем их библиотеки с официального сайта.
Для ClickHouse можно использовать рекомендованную библиотеку:
pip install clickhouse-connect
7. Устанавливаем apache-superset и инициализируем базу данных:
pip install apache-superset
superset db upgrade
8. Создаём администратора для Superset. Если планируете загружать тестовые данные, то обязательно нужно создавать пользователя с логином admin:
export FLASK_APP=superset
superset fab create-admin
9. Загружаем тестовые данные в Apache Superset:
superset load_examples
10. Инициализируем Superset:
superset init
11. Запускаем веб-приложение. Для доступа по внешнему IP-адресу добавляем ключ
host 0.0.0.0
, иначе доступ будет только по localhost. После запуска можно открыть Superset по IP-адресу виртуальной машины: нужно убедиться, что этот адрес вам доступен (это внешний IP или вы подключены к нужной сети), а также настройками Firewall вам открыт доступ по порту 8088.superset run -p 8088 --with-threads --reload --debugger --host 0.0.0.0
12. По умолчанию создаётся Memcached для хранения кеша запросов для внутреннего использования Superset. Для Production Ready лучше использовать свои базы данных для внутренней работы с Superset. Например, Redis или другие СУБД для кеша, PostgreSQL или другие — для метаданных. Для примера используем Redis и PostgreSQL. Устанавливаем библиотеки для них:
pip install redis
pip install psycopg2 psycopg2-binary
13. Создаём файл конфигурации и переменную окружения:
export SUPERSET_CONFIG_PATH=$HOME/superset_config.py
touch $SUPERSET_CONFIG_PATH
14. Записываем конфигурацию в файл, где нужно указать параметры подключения к PostgreSQL и к Redis:
import redis
import psycopg2
SQLALCHEMY_DATABASE_URI = "postgresql://metastore_admin:testpassword1234@10.0.0.37:5432/metastore"
FILTER_STATE_CACHE_CONFIG = {
'CACHE_TYPE': 'RedisCache',
'CACHE_DEFAULT_TIMEOUT': 86400,
'CACHE_KEY_PREFIX': 'superset_filter_',
'CACHE_REDIS_URL': 'redis://10.0.0.18:6379/0'
}
15. Запускаем сервер Superset с помощью gunicorn:
gunicorn -w 8 -k gevent --timeout 120 -b 0.0.0.0:8088
--limit-request-line 0 --limit-request-field_size 0
"superset.app:create_app()"
16. После завершения установки Superset будет готов к работе.
Развёртывание Apache Superset в Kubernetes
Развёртывание Superset в среде Kubernetes — возможность получить рабочий Production-Ready-инструмент. Связано это с тем, что Kubernetes обеспечивает высокую доступность, быстро масштабируется и легко справляется с нагрузкой. Кроме того, k8s гибко настраивается, что позволяет адаптировать его под разные задачи и доступный объём ресурсов.
Инструкция по развёртыванию в Kubernetes
1. Создаём кластер Kubernetes с предустановленным nginx в личном кабинете VK Cloud. Для создания и подключения к кластеру с помощью kubectl используем инструкции:
- а. Создание кластера: https://mcs.mail.ru/docs/ru/base/k8s/k8s-start/create-k8s
- b. Подключение к кластеру: https://mcs.mail.ru/docs/ru/base/k8s/k8s-start/connect-k8s
2. Для использования своих баз данных создаём экземпляры PostgreSQL и/или Redis в облаке VK Cloud.
3. Для удобного развёртывания нужен локально установленный Helm. Установить можно по инструкции для своей ОС: https://helm.sh/docs/intro/install/. Добавляем репозиторий с Superset:
helm repo add superset https://apache.github.io/superset
Helm Chart выбираем из-за удобства развёртывания приложений в Kubernetes и автоматизации.
4. За основу берём values.yaml из Github. В нём прописаны все параметры для создания и настройки Apache Superset в Kubernetes.
5. В values.yaml задаём пароль для администратора:
init:
resources: {}
command:
enabled: true
loadExamples: false
createAdmin: true
adminUser:
username: admin
firstname: Superset
lastname: Admin
email: admin@superset.com
password: testpassword
6. Для подключения отдельных инсталляций PostgreSQL и Redis в values.yaml задаём параметры. Здесь удобно использовать управляемые базы данных в VK Cloud.
supersetNode:
command:
- "/bin/sh"
- "-c"
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; /usr/bin/run-server.sh"
connections:
# Change in case of bringing your own redis and then also set redis.enabled:false
redis_host: '10.0.0.26'
# redis_password: superset
redis_port: "6379"
# You need to change below configuration incase bringing own PostgresSQL instance and also set postgresql.enabled:false
db_host: '10.0.0.37'
db_port: "5432"
db_user: superset
db_pass: superset12345678
db_name: superset
7. Прописываем библиотеки для СУБД в bootstrapScript. Например, для ClickHouse:
bootstrapScript: |
#!/bin/bash
rm -rf /var/lib/apt/lists/* && \
pip install \
psycopg2-binary==2.9.1 \
clickhouse-connect \
redis==3.5.3 && \
if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi
8. Запускаем развёртывание Superset с использованием нашего файла values.yaml:
helm upgrade --install --values values.yaml superset superset/superset
9. Для теста можем подключиться к Superset через port-forwarding. Это вариант для общей, базовой проверки инструмента — оценки корректности взаимодействия с внешними сервисами и налаженности каналов передачи данных.
kubectl port-forward service/superset 8088:8088
10. Открыть Superset можно будет только на локальном компьютере:
http://127.0.0.1:8088
Для обеспечения внешнего доступа к Apache Superset можно воспользоваться одним из инструментов Kubernetes: доступ через Ingress или Load Balancer.
- Kubernetes в VK Cloud интегрирован с платформенным балансировщиком, поэтому нужно задать необходимый параметр в values.yaml при развёртывании сервиса, убедиться, что есть квота на плавающий IP-адрес (видно на главной странице в личном кабинете), и заново запустить развёртывание.
service:
type: LoadBalancer
port: 8088
annotations:
{}
# cloud.google.com/load-balancer-type: "Internal"
loadBalancerIP: null
Далее выполняем:
helm upgrade --install --values values.yaml superset superset/superset
Назначенный внешний IP можно посмотреть следующей командой:
kubectl get services
- Для использования Ingress нужно отредактировать соответствующий раздел файла values.yaml и заново запустить развёртывание.
Главное по теме
- Apache Superset — инструмент бизнес-аналитики, который решает задачи сбора, обработки и визуализации данных. Это хороший выбор для компаний, которые привыкли работать с Open-Source-инструментами: знают «подводные камни», готовы при необходимости дорабатывать функциональность самостоятельно.
- Apache Superset можно развернуть в Docker, Kubernetes (k8s), на виртуальных машинах. Вариант развертывания Apache Superset не влияет на общую архитектуру, но каждая платформа подходит для разных задач. Например, развёртывание в Docker — вариант для простых тестов, в Kubernetes — для Production-Ready-решения.
- Apache Superset — не коробочное решение и не покрывает задачи полного цикла. Для работы с ним потребуется отдельно разворачивать, настраивать и поддерживать сторонние БД, а также использовать ПО для подготовки сырых данных и построения витрин данных.
- Любой из вариантов развёртывания можно реализовать в облаке VK Cloud, где также доступны нужные базы данных, сервисы для сбора данных и инструменты для бизнес-аналитики. Новые пользователи платформы после регистрации получат 3000 бонусов на тестирование сервисов.