Как стать автором
Обновить
VK
Технологии, которые объединяют

Как развернуть Apache Superset в облаке: Docker, ВМ, Kubernetes

Время на прочтение9 мин
Количество просмотров8.2K


В последнее время многие российские компании столкнулись с задачей по выстраиванию системы бизнес-аналитики на новом технологическом стеке. В качестве замены 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:

  1. Большой набор типов визуализации данных, возможность создавать дашборды и отчёты с использованием преднастроенных шаблонов. 
  2. Возможность добавления пользовательских плагинов для создания дашбордов.
  3. Расширяемая модель безопасности, которая позволяет гибко настраивать права доступа к функциональности продукта и данным.
  4. Встроенное асинхронное выполнение запросов и кеширование.
  5. Возможность настройки Single Sign-On (технология единого входа) для разных приложений с Superset.
  6. Гибкое масштабирование и возможность обработки больших объёмов данных без снижения производительности.
  7. Расширенная совместимость с базами данных: ClickHouse, Greenplum, PostgreSQL и не только.

Но Superset не панацея. У инструмента есть и недостатки:

  1. Высокие требования к компетенции специалистов — для подготовки данных и администрирования Superset нужен релевантный опыт. 
  2. Для работы с Apache Superset потребуется отдельно разворачивать, настраивать и поддерживать сторонние БД, а также использовать ПО для подготовки сырых данных и построения витрин данных. 
  3. Отсутствие технической поддержки, подробной документации. Здесь нет привычной поддержки вендора, задачи по доработке и расширению функциональности решает пользователь.
  4. Сложность создания кастомных плагинов и поддержки их стабильной работы при обновлении ПО.

Вместе с тем 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. 

  1. Перейдем на https://mcs.mail.ru/.
  2. Нажимаем «Регистрация».
  3. Указываем необходимые данные для регистрации.
  4. Входим в личный кабинет 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 используем инструкции:


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 и заново запустить развёртывание. 

Главное по теме


  1. Apache Superset — инструмент бизнес-аналитики, который решает задачи сбора, обработки и визуализации данных. Это хороший выбор для компаний, которые привыкли работать с Open-Source-инструментами: знают «подводные камни», готовы при необходимости дорабатывать функциональность самостоятельно. 
  2. Apache Superset можно развернуть в Docker, Kubernetes (k8s), на виртуальных машинах. Вариант развертывания Apache Superset не влияет на общую архитектуру, но каждая платформа подходит для разных задач. Например, развёртывание в Docker — вариант для простых тестов, в Kubernetes — для Production-Ready-решения.
  3. Apache Superset — не коробочное решение и не покрывает задачи полного цикла. Для работы с ним потребуется отдельно разворачивать, настраивать и поддерживать сторонние БД, а также использовать ПО для подготовки сырых данных и построения витрин данных.
  4. Любой из вариантов развёртывания можно реализовать в облаке VK Cloud, где также доступны нужные базы данных, сервисы для сбора данных и инструменты для бизнес-аналитики. Новые пользователи платформы после регистрации получат 3000 бонусов на тестирование сервисов. 
Теги:
Хабы:
+37
Комментарии2

Публикации

Информация

Сайт
team.vk.company
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия
Представитель
Руслан Дзасохов