Что такое Apache Superset? Установка Docker. Примеры дашбордов

Contents

Что такое Apache Superset?

Apache Superset — Open-Source инструмент для визуализации данных, входящий в портфолио продуктов Apache Foundation. Зародился Apache Superset в компании Airbnb, там же где появился Airflow. Эта система является очень популярной и хорошо развивается за счет привлечения новых контрибьютеров.

Количество комитов авторов на Github неуклонно растет:


Канал в телеграме Apache Superset BI:

Apache Superset BI - это современное корпоративное веб-приложение для бизнес-аналитики. Open-Source система визуализации данных


В настоящее время Superset широко используется во многих компаниях по всему миру (полный перечень компаний, использующих Apache Superset). Например, Superset запускается в производственной среде Airbnb внутри Kubernetes и ежедневно обслуживает более 600 активных пользователей, просматривающих более 100 000 диаграмм в день.

Также Apache Superset приобретает популярность в России, в том числе после ухода западных вендоров.

Ознакомиться с полным функционалом и настройками Superset можно в официальной документации https://superset.apache.org/docs/intro.

Обзор главных фич/основного функционала Apache Superset?

  • Интуитивно понятный интерфейс для визуализации наборов данных и создания интерактивных информационных панелей;
  • Много готовых коннекторов (возможность подключения к более чем 40 базам данных, с минимальными донастройками);
  • Интеграция с основными механизмами аутентификации (база данных, OpenID, LDAP, OAuth/SSO, REMOTE_USER и т.д.);
  • Большой набор типов визуализации данных (40+ отличных вариантов визуализаций);
  • Возможность добавления пользовательских плагинов визуализации;
  • Бесшовное асинхронное кэширование и запросы в памяти (из docker-compose поднимается настроенный Redis, надо только кеширование включить в config);
  • Расширяемая модель безопасности, которая позволяет настраивать очень сложные правила, определяющие, кто может получить доступ к каким функциям продукта и наборам данных;
  • Rest API (на основе спецификации OpenAPI) для программной настройки Superset — возможность взаимодействия с артефактами Superset;
  • Облачная архитектура, разработанная с нуля для масштабирования;
  • Есть функционал Alerting;
  • Есть функционал отправки отчетности на email;
  • Superset поставляется с SQL Lab — современной многофункциональной интегрированной средой разработки SQL IDE (для подготовки данных к визуализации);
  • SQL Lab and Explore поддерживает шаблоны Jinja в запросах (код Python можно встраивать в виртуальные наборы данных и в пользовательский SQL в фильтрах и элементах управления метриками);
  • Асинхронные запросы через Celery (распределённая очередь заданий, реализованная на языке Python);
  • К каждому отдельному дашборду можно применить кастомные стили CSS;
  • Апач Суперсет умеет делать снимки дашборда, причем не видимой части, а всего дашборда целиком. Если у Вас длинный дашборд (что случается периодически), то скачается весь лист с учетом скроллинга вниз;
  • в Superset есть Markdown-formatted text объект визуализации, который позволяет делать очень хорошие заметки к дашборду.

Основные плюсы и минусы Apache Superset

Плюсы (преимущества) Apache Superset

  • Довольно зрелая система с хорошим набором фич;
  • Т.к. Superset развивается под крылом Apache, то переход продукта из бесплатного в разряд платного маловероятен. На текущий момент весь функционал Superset полностью бесплатен и доступен из коробки;
  • Открытый исходный код (Вы можете добавить любую фичу, которая для бизнеса очень необходима и для разработки которой выделен бюджет — это может быть как новая визуализация, так и элемент интерфейса/меню/интеграции с любой вашей внутренней системой);
  • BI можно развернуть на внутренних серверах компании и не опасаться за безопасность данных (по сравнению с облачными решениями);
  • Богатый набор визуализаций данных (40+);
  • Большое количество тестовых демо дашбордов, на основе которых можно быстро понять возможности визуализации инструмента;
  • Можно встраивать визуализации из Superset в ваши внутренние приложения, системы;
  • Бесплатная версия функционала ничем не ограничена;
  • Есть настройка доступа как на уровне датасета и всех связанных дашбордов, так и на уровне данных (отдельных записей в БД);
  • No-Code подход для создания визулизаций, можно пустить пользователей для self-service (как на основе предподготовленных datasets, либо более продвинутый вариант с помощью sql);
  • Есть русскоязычный чат в Telegram (developer community);
  • А также канал Telegram с основными новостями по Apache Superset;

Минусы (недостатки) Apache Superset

Возможно часть минусов будут закрыты в новых релизах выпуском новой функциональности. Следите обязательно за новостями!

  • Основным минусом, на мой взгляд, является необходимость подготовки dataset, который является прямой таблицей. Т.е. создать модель данных с несколькими таблицами, соединенных по ключу (как в Qlik Sense или Power BI), особенно если разные сущности имеют связь 1 ко многим — очень сложно. Либо придется делать дашборд из нескольких датасетов, но тогда усложняется работа с запросами и потребуется параметризация, чтобы фильтр срабатывал для двух датасетов одновременно.
  • Очень непросто создавать Custom Plugins (кастомные визуализации). Если развертывание и конфигурирование Superset можно оценить по сложности как 4 баллов из 10 для новичка. То создание плагина/деплой выльются в полные 10 баллов. Есть ряд свежих инструкций по созданию кастом плагинов для Superset, например на моем сайте — Build & Deploy Custom Superset Viz Plugin. Основные скилы, которые нужны для создания Custom Plugin и его деплоя:
    • docker & Dockerfile & docker build
    • docker-compose
    • Linux (Ubuntu)
    • npm, yarn, build, npm registry
    • React, javascript, typescript
    • json и обработка json структур с помощью typescript/javasript
    • git
  • Условная бесплатность Superset: он требует довольно сильных специалистов как по части подготовки данных, так и по части его администрирования. Это может быть 1 человек или команда, в зависимости от потребности бизнеса в аналитике.
  • Для Apache Superset необходим сторонний движок БД, идеально ClickHouse или другие колоночные базы данных, которые могут на своей стороне быстро обрабатывать запросы.
  • Также необходим сторонний ETL инструмент для подготовки данных. В целом сойдет и Python, но тогда нужна система оркестрации всем ETL.
  • Если Вы нашли баг в Apache Superset — теперь это ваша головная боль, поддержка исключительно на английском языке (хотя ввиду ситуации в России скоро должны появиться и на местном рынке услуги по Apache Superset).
  • Сложность бекапирования и восстановления ввиду контейнеризации. Если работать без контейнеров, то придется возиться с зависимостями и инсталляцией на чистую OS.
  • Сообщество разработчиков находится в Slack, что в текущих условиях может затруднять доступ к получению быстрой помощи.
  • Немного непрозрачная модель настройки ролей доступа (нужно потратить какое-то время на освоение какая настройка за что отвечает).
  • Есть небольшая доля вероятности, что из-за санкций придется Apache Superset качать через VPN сервисы (небольшая вероятность, но назвать её стоит).
  • Сложный процесс обновления версии ПО, особенно если у вас имеются custom plugins. Придется протестировать отдельно сборку образа, отдельно накатывание новой версии на тестовую среду.
  • Прежде всего это инструмент для визуализации данных. Для создания сложных приложений с элементами управления потребуется продвинутый уровень (необходимо изучить способы применения jinja & python в superset).
  • Не очень удобный функционал фильтров, нет компактности. Стандартный Filter Box скоро будет удален из функционала (он к тому же потреблял много ресурсов, у меня есть такая гипотеза, которую я не проверял).
  • Нет кнопок, переменных и т.п. функционала из коробки для работы с параметрами.
  • Если нужно поменять datasource для дашборда (например, вы решите из одной схемы перенести таблицу в другую схему, чтобы изменить доступ), то придется создать новый datasource и в каждом chart заменить datasource. Но есть проблемка, при замене datasource в chart слетают все настройки chart (поля, меры, фильтры). Фактически приходится заново создавать chart. Проверял до 1.3.0 версии (возможно дальше этот багофичу починили).
  • Очень ограниченный функционал таблиц, нет ссылок, картинок.
  • Из документации не всегда понятно, что нужно сделать и как делать. Большая часть описана скорей для DevOps инженеров. Приходится делать множество попыток, прежде чем получается. После проприоритарных BI плюешься в разные стороны, т.к. сил на настройку тратится очень много и результат не всегда получается. Если Вы не спец по Linux и python — рекомендую закатать рукава 😉

Почему я рекомендую использовать Apache Superset?

Лично для меня есть несколько основных доводов согласно которым я хочу посоветовать использовать Apache Superset (в том числе вместо российского BI):

  1. Его условная бесплатность, популярность и простота использования;
  2. Наличия кучи коннекторов, в том числе для ClickHouse;
  3. Ядро Apache Superset — python и react (есть мотивация подтянуть, пригодится и в других инструментах);
  4. Динамично развивается функционал (некоторые фичи, например, как сертификация визуализаций, отсутствует в известных BI системах);
  5. На нем работают или вводят в эксплуатацию несколько крупных российских компаний (Вкусвилл, Сбер, Ozon, МТС, VK);
  6. Визуализации используются из Apache ECharts что очень круто;
  7. Если у Вас есть проприоритарный BI, то Superset однозначно позволит срезать косты по лицензиям для тех отчетов, которые являются простыми и которые необходимы широкому кругу лиц. 

Обзор нововведений Apache Superset в релизах 1.3, 1.4, 1.5

В этом разделе описаны наиболее значимые новвоведения в релизах Apache Superset.

Примечания к релизу Apache Superset version 1.3.0

Усовершенствования в работе с диаграммами:

  • Воронкообразная диаграмма
  • Древовидная диаграмма
  • Переработанная визуализация treemap

Улучшения пользовательского интерфейса:

  • Улучшен пользовательский интерфейс галереи графиков (категории диаграмм)
  • Облегчено добавление новых подключений к базе данных в Superset через пошаговую инструкцию.

Примечания к релизу Apache Superset version 1.4.0

Этот релиз содержит:

  • Сертификация диаграмм и информационных панелей: Понимание того, какие диаграммы и информационные панели надежны, полезны и актуальны, является универсальной задачей в инструментах бизнес-аналитики. Чтобы решить эту проблему, теперь вы можете сертифицировать диаграммы и информационные панели и прикреплять к ним свое имя.

  • Улучшенные возможности компоновки панели мониторинга: теперь можно добавлять вкладки в столбцы.
  • Больше переменных в шаблонах Jinja: Шаблоны Jinja позволяют добавить больше динамики вашим информационным панелям. В Superset 1.4 добавлена ​​поддержка ссылок и переменных в коде Jinja. time_grain, time_column
  • Оповещения и отчеты в Superset получили несколько незначительных обновлений пользовательского интерфейса, которые сделали их более читабельными и удобными.
  • ClickHouse: Superset теперь включает имена функций ClickHouse в автозаполнение для SQL Lab.

Примечания к релизу Apache Superset version 1.5.0

  • Оптимизировали загрузку сложных информационных панелей
  • Улучшили дизайн для нативных фильтров (superset native filters)
  • Добавлен функционал зависимости фильтров друг от друга (теперь при выборе значений в одном фильтре ограничиваются отображаемые значения в других фильтрах) — привет ассоциативность 🙂 
  • Появился функционал добавления пользовательских выражений непосредственно в диаграммы (без необходимости добавления их в набор данных в виде сохраненных выражений)
  • Сделан ряд улучшений для кэширования:
    • Superset 1.5 представляет SupersetMetastoreCache , который позволяет кэшировать данные в хранилище метаданных Superset, не полагаясь на внешний кеш, такой как Redis или Memcached.
    • Раньше информационные панели с большим количеством фильтров вызывали ошибки, потому что состояние фильтра находилось в самом URL-адресе, что приводило к проблеме с длинным URL-адресом. Теперь Superset хранит состояние Dashboard и Explore в кеше (а не в URL-адресе).
    • Основываясь на обеих вышеупомянутых функциях, постоянные URL-адреса страниц Dashboard и Explore теперь сохраняют состояние в объектах JSON в хранилище метаданных Superset (вместо URL-адреса). Кроме того, URL-адреса содержат хэши вместо числовых идентификаторов для дополнительной безопасности.

Установка Apache Superset на docker с помощью Docker Compose

Устанавливается Apache Superset довольно просто, если не сопротивляться и сразу идти в сторону Docker. Т.к. основным минусом Apache Superset является необходимость много делать руками в среде Linux, а значит необходимо наличие специалиста, способного либо разобраться с Docker и Docker-Compose (в идеале DevOps инженера).

Интро для упрямых 🙂

Установка напрямую в Linux среду возможна только при соблюдении множества факторов (версии python, библиотек, зависимостей и т.д. и т.п.). Любой фактор несоответствующий среде разработки сфейлит инсталляцию. Именно поэтому почти любой open source софт идет в комплекте с образом, dockerfile, docker-compose инструкциями и т.д.
Если вы ставите напрямую в свою среду без докера — то будьте готовы, что никто не поможет с ошибками, т.к. все работают через докер.

Мне кажется, что дешевле по времени и перспективнее освоить Docker. Так точно надежнее будет, т.к. все зависимости задаются настройками, плюс это тестируется сообществом.
Apache Superset разворачивается всегда на конкретной версии python, а поставить фиксированную старую версию python в Linux без пляски с бубном тяжело.

Краткая инструкция по установке Apache Superset 1.5 через docker-compose

Установка docker и docker-compose на Ubuntu 20.04

Установка Apache Superset 1.5

Картинки по установке согласно описанным шагам

Шаг 1. Клонируем проект Superset из репозитория github:

git clone https://github.com/apache/superset.git

Шаг 2. Переходим в директорию, переключаемся на версию 1.5.0 и проверяем статус репозитория:

Шаг 3. Правим версию образа в файле docker-compose-non-dev.yml:

Шаг 4. Запуск инсталляции с помощью docker-compose:

Шаг 5. Проверка установленной версии Apache Superset:

Какие файлы необходимо изучить для работы с Superset через Docker и Docker-Compose?

Директории и файлы, необходимые для:

  • Сборки образа
  • Установки Apache Superset с помощью docker-compose
  • Настройки параметров инсталляции через docker-compose (пароли, порты и т.п.)
  • Настройки параметров среды

Ниже представлены файлы, которые помогут Вам в настройке Apache Superset:

Описание последовательности действий при запуске docker-compose -f docker-compose-non-dev.yml up

  1. Сначала скачиваются все образы, которые необходимы для многоконтейнерной установки
    • контейнер superset_app: образ apache/superset — версия 1.5.0 (1.59 GB)
    • контейнер superset_cache: образ redis — версия latest (105.4 MB)
    • контейнер superset_db: образ postgres — версия 10 (199.9 MB)
    • контейнер superset_init: образ apache/superset — версия 1.5.0
    • контейнер superset_worker: образ apache/superset — версия 1.5.0
    • контейнер superset_worker_beat: образ apache/superset — версия 1.5.0
  2. Конфигурация для DB с метаданными (postgresql) берется из файла docker/.env-non-dev
  3. Далее запускается /app/docker/docker-bootstrap.sh и app-gunicorn
  4. Далее запускается скрипт /app/docker/docker-init.sh
  5. Далее запускается /app/docker/docker-bootstrap.sh и worker
  6. Далее запускается /app/docker/docker-bootstrap.sh и beat

Рекомендую сразу установить себе portainer, чтобы работать с docker (особенно для новичков будет полезно). В нем можно увидеть по stack = superset установленные контейнеры, сети и т.п. инфу:

Например, можно посмотреть настройки, примененные к отдельному контейнеру:

Описание последовательности процессов на основе лога Superset

Описание процесса запуска Superset из лога работы docker-compose:

  1. Attaching to superset_db, superset_cache, superset_init, superset_worker_beat, superset_worker, superset_app
  2. Starting web app (Redis is starting, Server initialized, Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf)
  3. PostgreSQL Database
  4. Init Step 1/4 [Starting] — Applying DB migrations
  5. Starting Celery worker
  6. Starting Celery beat
  7. Starting gunicorn
  8. Using worker: gthread
  9. logging was configured successfully
  10. Loaded your LOCAL configuration at [/app/docker/pythonpath_dev/superset_config.py]
  11. celery beat v4.4.7 (cliffs) is starting
  12. Init Step 2/4 [Starting] — Setting up admin user ( admin / admin ) — логин и пароль по умолчанию
  13. Init Step 3/4 [Starting] — Setting up roles and perms
  14. Init Step 4/4 [Starting] — Loading examples

Схема зависимостей в инсталляции Apache Superset через docker-compose

Схема зависимостей в инсталляции Apache Superset через docker-compose

Описание файла docker-bootstrap.sh

 

Описание файла docker-init.sh

 

Архитектура Apache Superset

Superset использует React и TypeScript во внешнем интерфейсе и Python в бэкэнде. Для улучшения производительности используется трёхуровневое кэширование через Flask-Cache.

Фреймворк Flask выполняет задачи CRUD и работу с ролями Roles, Authentication и т.д. Pandas выполняет преобразования данных, полученных из БД. Для подключения к базе данных и выполнения запросов используется библиотека SQLAlchemy.


Superset также является облачным в том смысле, что он гибкий и позволяет вам выбирать:

  • веб-сервер (Gunicorn, Nginx, Apache);
  • механизм базы данных метаданных (MySQL, Postgres, MariaDB и т.д.);
  • очередь сообщений (Redis, RabbitMQ, SQS и т.д.);
  • серверная часть результатов (S3, Redis, Memcached и т.д.);
  • уровень кэширования (Memcached, Redis и т.д.).

Superset также хорошо работает с такими сервисами, как NewRelic, StatsD и DataDog, и может выполнять аналитические рабочие нагрузки для большинства популярных технологий баз данных.

Apache Superset включает следующие компоненты:

  • Веб-сервер (может работать несколько экземпляров)
  • База данных метаданных
  • Кэш-слой
  • Очередь сообщений для асинхронных запросов
  • Серверная часть результатов

Apache Superset состоит из множества компонентов, которые отвечают за функционирование Frontend и Backend. Для Frontend использованы технологии node.js, javascript, React. Для Backend — Python (Flask, Pandas, SQLAlchemy).

Описание функциональности компонентов:

  • Celery — это библиотека Python, используемая для обработки трудоемких задач и делегирования их отдельным процессам или распределенным сетевым хостам, чтобы снизить нагрузку на веб-серверы / серверные службы. Celery — хорошее решение для планирования выполнения задач в архитектуре микросервисов.
  • celery beat — планировщик, который запускает задачи через равные промежутки времени, которые затем выполняются доступными рабочими узлами в кластере.
  • Celery реализует Workers с помощью пула выполнения, поэтому количество задач, которые может выполнить каждый worker, зависит от количества процессов в пуле выполнения.

Дашборд Apache Superset состоит из Charts, которые связаны с заранее созданными datasets, которые подключены к хранилищам данных или базам данных с заранее подготовленными витринами данных.

Правильный HTTP-сервер WSGI

Вы можете настроить Superset для работы на Nginx или Apache, однако многие используют Gunicorn, который является предпочтителен для использования в асинхронном режиме (обеспечивает параллелизм в работе).

Конфигурация Python для Apache Superset (superset_config.py)

Чтобы настроить ваше приложение, вам нужно создать файл (модуль) superset_config.py и убедиться, что он находится в вашем PYTHONPATH.

Все параметры и значения по умолчанию, определенные в https://github.com/apache/superset/blob/master/superset/config.py , можно изменить в вашем локальном файле superset_config.py. Администраторы захотят прочитать файл, чтобы понять, что можно настроить локально, а также значения по умолчанию.

Поскольку superset_config.py действует как модуль конфигурации Flask, его можно использовать для изменения настроек самого Flask, а также расширений Flask, таких как flask-wtfflask-cachingflask-migrateи flask-appbuilder. Flask App Builder, веб-фреймворк, используемый Superset, предлагает множество настроек конфигурации. Пожалуйста, обратитесь к документации Flask App Builder для получения дополнительной информации о том, как его настроить.

Обязательно измените:

  • SQLALCHEMY_DATABASE_URI: по умолчанию он хранится в ~/.superset/superset.db
  • SECRET_KEY: в длинную случайную строку

Кэширование в Superset

Superset использует Flask-Caching для кэширования. Настроить кеширование так же просто, как предоставить пользовательскую конфигурацию кеша superset_config.py, которая соответствует спецификациям Flask-Caching. Flask-Caching поддерживает различные механизмы кэширования, включая Redis, Memcached, SimpleCache (в памяти) или локальную файловую систему. Также поддерживаются настраиваемые серверные части кэша. Подробности смотрите здесь

Можно настроить следующие конфигурации кэша:

  • Кэш метаданных (необязательно): CACHE_CONFIG
  • Данные диаграммы, запрашиваемые из наборов данных (необязательно): DATA_CACHE_CONFIG
  • Результаты запроса лаборатории SQL (необязательно): RESULTS_BACKEND.
  • Состояние фильтра панели мониторинга (обязательно): FILTER_STATE_CACHE_CONFIG.
  • Изучите данные формы диаграммы (обязательно): EXPLORE_FORM_DATA_CACHE_CONFIG

Обратите внимание, что требуется кэширование Dashboard и Explore. Если эти кэши не определены, Superset возвращается к использованию встроенного кэша, который хранит данные в базе данных метаданных. Хотя рекомендуется использовать выделенный кэш, встроенный кэш также можно использовать для кэширования других данных.

Библиотеки для кеширования:

  • Redis (рекомендуется): пакет Redis Python
  • Memcached: рекомендуется использовать клиентскую библиотеку pylibmc т.к. python-memcached не поддерживает правильное хранение двоичных данных.

Прогрев кеша дашбордов

В Superset есть задача Celery, которая может периодически запускаться и прогревать кеш на основе разных стратегий.

Например:

будет кэшировать все диаграммы в топ-5 самых популярных информационных панелей каждый час.

Стратегии прогрева кеша Superset находятся в директории: superset/tasks/cache.py

Что такое Flower и зачем он нужен?

Flower — это веб-инструмент для мониторинга кластера Celery, который вы можете установить из pip:

Вы можете запустить Flower, используя:

Также с помощью Flower UI можно управлять асинхронными выполнениями запросов через Celery-based executors.

Настройка Superset Config файла

todo

Список доступных визуализаций в версии Apache Superset 1.5.0


Канал в телеграме Apache Superset BI:

Apache Superset BI - это современное корпоративное веб-приложение для бизнес-аналитики. Open-Source система визуализации данных


Примеры дашбордов Apache Superset

Ниже представлены примеры дашбордов из демо-примеров, которые загружаются в стандартной конфигурации при установке через docker-compose.

Сборник примеров архитектур BI-систем на базе Apache Superset

ВкусВилл — Архитектура BI-системы

Пример архитектуры внедрения Apache Superset во вкусвилл

Полное видео

Платформа данных в Леруа Мерлен

Источник: habr.com Платформа данных в Леруа Мерлен. Part 2. Обновления 2021 года: Flink и Superset

Платформа данных в Леруа Мерлен Apache Flink и Superset

Подборка материалов по Apache Superset для дальнейшего развития навыков разработки

Сборка и деплой кастомной визуализации в Apache Superset

ClickHouse

Выгрузка в Excel из Superset

Dynamic Imports Example Plugin

Dynamic Imports Example Plugin (фича не опробована лично мной, но функционал присутствует в настройках)

Динамический импорт плагинов означает, что весь ваш код хранится на каком-то сервисе cdn и вам не нужно при каждом изменении плагина билдить образ и деплоить снова и снова superset.

Инструкции по работе с Superset

3
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x