Apache Superset - Установка и настройка
- Начало работы
- Дружит с Облаком!
- Стартуйте с Docker
- Особенности в зависимости от используемой ОС
- VirtualEnv в Python
- Инструменты настройки Python и pip
- Установка и инициализация Superset
- Правильный HTTP-сервер WSGI
- Права доступа Flask-AppBuilder
- Балансировщик нагрузки
- Настройка
- Подключение к базам данных
- (AWS) Athena
- Snowflake
- Teradata
- Кэширование
- Глубокая интеграция SQLAlchemy
- Схемы (Postgres и Redshift)
- Внешнее хранилище паролей для SQLAlchemy соединений
- SSL-доступ к базам данных
- Druid
- CORS
- Промежуточное ПО
- Обновление
- SQL Lab
- Сборка из исходников
- Blueprints
- StatsD
- Запуск в Kubernetes
- Пользовательская конфигурация OAuth2
Начало работы
Superset приостановил работу на Python 2. и поддерживает только ~= 3.6, что дает возможность воспользоваться преимуществами новых функций Python и снизить нагрузку на предыдущие версии. Мы запускаем наш тестовый пакет для версии 3.6, но работа с версией 3.7 также должна быть успешной.
Дружит с Облаком!
Superset спроектирован таким образом, чтобы быть максимально доступным. Он “дружит с облаком”, поскольку хорошо работает в больших распределенных средах, а также внутри контейнеров. Вы можете совершенно спокойно протестировать Superset на своем ноутбуке, фактически его масштабирование практически не ограничено. Superset также сloud friendly и в том смысле, что эта платформа достаточно гибкая и позволяет работать с вэб-серверами (Gunicorn, Nginx, Apache), базами метаданных (MySQL, Postgres, MariaDB, …), брокерами сообщений (Redis, RabbitMQ, SQS, …), бекэндами (S3, Redis, Memcached, …), кэшированием (Memcached, Redis, …), хорошо работает с такими сервисами, как NewRelic, StatsD и DataDog, имеет возможность выполнять аналитические процессы для большинства популярных технологий баз данных.
Superset протестирован в больших средах с сотнями одновременных пользователей. Производственная среда Airbnb работает внутри Kubernetes и ежедневно обслуживает более 600 активных пользователей, просматривающих более 100 000 диаграмм в день.
Веб-сервер Superset и работники Superset Celery (опционально) не имеют гражданства, поэтому вы можете запускать столько серверов, сколько необходимо.
Стартуйте с Docker
Если Вы знаком с Docker, считайте, что Вам крупно повезло, у нас есть короткий путь, позволяющий инициализировать среду разработки:
git clone https://github.com/apache/incubator-superset/ cd incubator-superset cp contrib/docker/{docker-build.sh,docker-compose.yml,docker-entrypoint.sh,docker-init.sh,Dockerfile} . cp contrib/docker/superset_config.py superset/ bash -x docker-build.sh docker-compose up -d docker-compose exec superset bash bash docker-init.sh
По истечении нескольких минут, необходимых для завершения инициализации Superset, откройте браузер и выберите http://localhost:8088 для того, чтобы начать Ваше путешествие.
Если Вы хотите работать на MAC, предоставляем инструкцию для OSX: https://docs.docker.com/docker-for-mac/#advanced
Или, если Вы супер любопытный и хотите установить Superset по полной программе, то вперед!
Особенности в зависимости от используемой ОС
Superset хранит информацию о подключении к базе данных в своей базе метаданных. Поэтому мы используем библиотеку Python для шифрования паролей подключения. К сожалению, она ориентируется на различные ОС.
Вы можете попробовать выполнить следующий шаг («Установка и инициализация Superset») и вернуться к этому шагу, если обнаружите ошибку.
Начнем установку:
Для Debian и Ubuntu необходима следующая команда:
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python-pip libsasl2-dev libldap2-dev
Ubuntu 16.04. Если у Вас установлен Python3.5 наряду с Python2.7, как по умолчанию в Ubuntu 16.04 LTS, также выполните эту команду:
sudo apt-get install build-essential libssl-dev libffi-dev python3.5-dev python-pip libsasl2-dev libldap2-dev
Для Fedora and RHEL необходима следующая команда:
sudo yum upgrade python-setuptools sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel
OSX. Установите Python с помощью Homebrew через pip:
brew install pkg-config libffi openssl python env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography==1.9
На данный момент Windows официально не поддерживается, но если вы все-таки хотите попробовать, загрузите get-pip.py и запустите python get-pip.py ,для которого может потребоваться доступ администратора. Затем выполните следующее:
C:\>pip install cryptography # You may also have to create C:\Temp C:\> md C:\Temp
VirtualEnv в Python
Рекомендуем установит Superset в VirtualEnv. У Python 3 уже есть VirtualEnv, для Python 2 необходимо его установить. Если он уже есть в Вашей операционной системе, установите его, в противном случае Вы можете сделать это через pip.:
pip install virtualenv
Вы можете создать и активировать VirtualEnv следующим образом:
# virtualenv is shipped in Python 3 as pyvenv virtualenv venv . ./venv/bin/activate
Для Windows команда активации выглядит следующим образом:
venv\Scripts\activate
Как только VirtualEnv активирована, все, что Вы делаете, происходит в пределах VirtualEnv. Для того, чтобы покинуть среду, просто напечатайте deactivate.
Инструменты настройки Python и pip
Повысьте свои шансы на успех, установив самые последние версии pip и библиотеки setuptools:
pip install --upgrade setuptools pip
Установка и инициализация Superset
Для установки Superset следуйте следующему алгоритму:
# Install superset pip install superset # Create an admin user (you will be prompted to set username, first and last name before setting a password) fabmanager create-admin --app superset # Initialize the database superset db upgrade # Load some data to play with superset load_examples # Create default roles and permissions superset init # To start a development
После установки Вы сможете вбить в Вашем браузере следующее: http://localhost:8088, войти в систему, используя учетные данные, которые Вы ввели при создании учетной записи администратора, перейти в Меню -> Администратор -> Обновить метаданные. Это действие должно привести к тому, что Superset будет знать обо всех ваших источниках данных, и они должны появиться в Меню -> Источники данных, откуда Вы сможете наконец-то начать играть со своими данными!
Правильный HTTP-сервер WSGI
Хотя Вы можете настроить Superset для работы на Nginx или Apache, многие используют Gunicorn, предпочтительно в асинхронном режиме, который довольно прост в установке и настройке. Пожалуйста, обратитесь к документации предпочитаемой Вами технологии, чтобы настроить приложение Flask WSGI так, чтобы оно хорошо работало именно В вашей среде. Вот асинхронная установка:
gunicorn \ -w 10 \ -k gevent \ --timeout 120 \ -b 0.0.0.0:6666 \ --limit-request-line 0 \ --limit-request-field_size 0 \ --statsd-host localhost:8125 \ superset:app
Для получения дополнительной информации обратитесь к Gunicorn документации.
Обратите внимание, что Gunicorn не работает в Windows, поэтому команда superset runserver работать не будет. Также обратите внимание, что веб-сервер (superset runserver -d) не предназначен для использования в производственной среде.
Если Вы не используете Gunicorn, можете отключить использование flask-compress, установив ENABLE_FLASK_COMPRESS = False в вашем superset_config.py.
Права доступа Flask-AppBuilder
По умолчанию каждый раз при инициализации приложения Flask-AppBuilder (FAB) права доступа и представления автоматически добавляются в серверную часть и связываются с ролью «Администратора». Однако проблема заключается в том, что когда Вы одновременно запускаете несколько рабочих процессов, это создает множество конфликтов и условий для «гонки» при определении прав доступа и представлений.
Чтобы решить эту проблему, автоматическое обновление прав доступа можно отключить, установив для SUPERSET_UPDATE_PERMS значение 0. Значение 1 включает его, 0 — отключает. Обратите внимание, что если функция не определена, она включена для обеспечения обратной совместимости.
В производственной среде инициализация может принимать следующую форму:
export SUPERSET_UPDATE_PERMS=1 superset init export SUPERSET_UPDATE_PERMS=0 gunicorn -w 10 … superset:app
Балансировщик нагрузки
Если Вы используете Superset при балансировщике нагрузки или обратном прокси-сервером (например, NGINX или ELB на AWS), Вам может потребоваться использование конечной точки мониторинга работоспособности, чтобы Ваш балансировщик нагрузки знал, работает ли Ваш Superset. Это предоставлено в /health, который отдает 200 ОК, если веб-сервер работает.
Если балансировщик нагрузки вводит хедер X-Forwarded-For/X-Forwarded-Proto, Вы должны установить ENABLE_PROXY_FIX = True в файле конфигурации Superset, чтобы использовать хедеры.
В случае, если обратный прокси-сервер используется для обеспечения SSL, может потребоваться явное указание X-Forwarded-Proto. Для веб-сервера Apache это можно установить следующим образом:
RequestHeader set X-Forwarded-Proto "https"
Настройка
Чтобы настроить Ваше приложение, нужно создать файл (модуль) superset_config.py и убедиться, что он находится в Вашем PYTHONPATH. Вот некоторые параметры, которые Вы можете скопировать/вставить в этот модуль настройки:
#--------------------------------------------------------- # Superset specific config #--------------------------------------------------------- ROW_LIMIT = 5000 SUPERSET_WEBSERVER_PORT = 8088 #--------------------------------------------------------- #--------------------------------------------------------- # Flask App Builder configuration#--------------------------------------------------------- # Your App secret key SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h' # The SQLAlchemy connection string to your database backend # This connection defines the path to the database that stores your # superset metadata (slices, connections, tables, dashboards, ...). # Note that the connection information to connect to the datasources # you want to explore are managed directly in the web UI SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db' # Flask-WTF flag for CSRF WTF_CSRF_ENABLED = True # Add endpoints that need to be exempt from CSRF protection WTF_CSRF_EXEMPT_LIST = [] # A CSRF token that expires in 1 year WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365 # Set this API key to enable Mapbox visualizations MAPBOX_API_KEY = ''
Все параметры и значения по умолчанию, определенные в https://github.com/apache/incubator-superset/blob/master/superset/config.py , можно изменить в Вашем локальном superset_config.py. Администраторам необходимо прочитать данный файл, чтобы понять, что можно настроить локально, а также ознакомиться со значениями по умолчанию.
Поскольку superset_config.py действует как модуль конфигурации Flask, его можно использовать для изменения настроек самого Flask, а также расширений Flask, таких как flask-wtf, flask-caching, flask-migrateи flask-appbuilder. Flask App Builder, веб-фреймворк, используемый Superset, предлагает множество настроек конфигурации. Пожалуйста, обратитесь к документации Flask App Builder для получения дополнительной информации о том, как его настроить.
Обязательно измените:
- SQLALCHEMY_DATABASE_URI, по умолчанию он хранится в ~/.superset/superset.db
- SECRET_KEY, в длинную случайную строку
Если Вам нужно исключить конечные точки из CSRF (например, если вы используете пользовательскую конечную точку постбэка аутентификации), Вы можете добавить конечные точки в:
WTF_CSRF_EXEMPT_LIST WTF_CSRF_EXEMPT_LIST = [‘’]
Подключение к базам данных
Superset не поставляется в комплекте с возможностью подключения к базам данных, за исключением Sqlite, которая является частью стандартной библиотеки Python. Вам нужно установить необходимые пакеты для базы данных, которую Вы хотите использовать в качестве базы метаданных, а также пакеты, необходимые для подключения к базам данных, к которым Вы хотите получить доступ через Superset.
Предоставляем список некоторых рекомендованных пакетов.
База данных |
Пакет pypi |
Префикс URI |
MySQL |
pip install mysqlclient |
mysql:// |
Postgres |
pip install psycopg2 |
postgresql+psycopg2:// |
Presto |
pip install pyhive |
presto:// |
Hive |
pip install pyhive |
hive:// |
Oracle |
pip install cx_Oracle |
oracle:// |
sqlite |
|
sqlite:// |
Snowflake |
pip install snowflake-sqlalchemy |
snowflake:// |
Redshift |
pip install sqlalchemy-redshift |
redshift+psycopg2:// |
MSSQL |
pip install pymssql |
mssql:// |
Impala |
pip install impyla |
impala:// |
SparkSQL |
pip install pyhive |
jdbc+hive:// |
Greenplum |
pip install psycopg2 |
postgresql+psycopg2:// |
Athena |
pip install "PyAthenaJDBC>1.0.9" |
awsathena+jdbc:// |
Athena |
pip install "PyAthena>1.2.0" |
awsathena+rest:// |
Vertica |
pip install sqlalchemy-vertica-python |
vertica+vertica_python:// |
ClickHouse |
pip install sqlalchemy-clickhouse |
clickhouse:// |
Kylin |
pip install kylinpy |
kylin:// |
BigQuery |
pip install pybigquery |
bigquery:// |
Teradata |
pip install sqlalchemy-teradata |
teradata:// |
Обратите внимание, что поддерживаются и многие другие базы данных, основными критериями которых являются наличие библиотеки SqlAlchemy и драйвера Python. Поиск в Google ключевого слова sqlalchemy в дополнение к ключевому слову, описывающему базу данных, к которой Вы хотите подключиться, должен привести Вас в нужное место.
(AWS) Athena
Строка подключения к Athena выглядит следующим образом:
awsathena+jdbc://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
Где Вам нужно закодировать как минимум s3_staging_dir, т. е.,
s3://... -> s3%3A//...
Вы также можете использовать библиотеку PyAthena (нет необходимости в java) следующим образом:
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
Смотрите PyAthena.
Snowflake
Строка подключения к Snowflake выглядит следующим образом:
snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}
Схема не требуется в строке подключения, так как она определяется для таблицы/запроса. Роль и хранилище можно не указывать, если для пользователя определены значения по умолчанию, т.е.
snowflake://{user}:{password}@{account}.{region}/{database}
Убедитесь, что у пользователя есть права доступа и использования всех необходимых баз данных/схем/таблиц/представлений/хранилищ, так как движок Snowflake SQLAlchemy не проверяет права пользователя.
Примечание: На момент написания этой статьи в текущей стабильной версии (1.1.2) пакета snowflake-sqlalchemy наблюдалась регрессия, которая вызывала проблемы при использовании с Superset. Рекомендуется использовать версию 1.1.0 или попробовать более новую версию.
Смотрите Snowflake SQLAlchemy.
Teradata
Строка подключения к Teradata выглядит следующим образом:
teradata://{user}:{password}@{host}
Примечание: для правильной работы sqlalchemy необходимо установить драйверы Teradata ODBC и настроить переменные среды. Драйверы Teradata ODBC доступны здесь: https://downloads.teradata.com/download/connectivity/odbc-driver/linux
Требуемые переменные среды:
export ODBCINI=/.../teradata/client/ODBC_64/odbc.ini export ODBCINST=/.../teradata/client/ODBC_64/odbcinst.ini
Смотрите Teradata SQLAlchemy.
Кэширование
Superset использует Flask-Cache для кэширования. Настроить кэширование так же просто, как CACHE_CONFIG и предоставить его DATA_CACHE_CONFIG в superset_config.py в соответствии со спецификациями Flask-Caching.
Flask-Caching поддерживает различные механизмы кэширования, включая Redis, Memcached, SimpleCache (в памяти) или локальную файловую систему. Если Вы собираетесь использовать Memcached, используйте клиентскую библиотеку pylibmc, поскольку python-memcached не поддерживает правильное хранение двоичных данных. Если Вы используете Redis, установите пакет Redis Python:
pip install redis
Для установки тайм-аутов, заходим в метаданные Superset, поднимаемся по «timeout searchpath», от конфигурации среза к источнику данных, базе данных, а затем в конечном итоге возвращается к глобальному значению по умолчанию, определенному в CACHE_CONFIG.
CACHE_CONFIG = { 'CACHE_TYPE': 'redis', 'CACHE_DEFAULT_TIMEOUT': 60 * 60 * 24, # 1 day default (in secs) 'CACHE_KEY_PREFIX': 'superset_results', 'CACHE_REDIS_URL': 'redis://localhost:6379/0', }
Глубокая интеграция SQLAlchemy
Можно настроить информацию о соединении с базой данных, используя параметры, предоставляемые SQLAlchemy. В представлении Database edit вы можете редактировать Extra поле как двоичный объект JSON.
Эта строка JSON содержит дополнительные элементы конфигурации. Объект engine_params распаковывается в sqlalchemy.create_engine, а metadata_params распаковывается в sqlalchemy.MetaData. Дополнительные сведения см. в документации по SQLAlchemy.
Схемы (Postgres и Redshift)
Такие базы данных, как Postgres и Redshift, используют схему в качестве логической сущности поверх базы данных. Чтобы Superset подключался к определенной схеме, можно задать параметр схема в форме «Edit Tables»
Внешнее хранилище паролей для SQLAlchemy соединений
Superset можно настроить для использования внешнего хранилища паролей базы данных. Это полезно, если Вы используете собственную структуру хранения секретных данных и не хотите хранить их в метабазе данных Superset.
Пример. Напишите функцию, которая принимает один аргумент типа sqla.engine.url и возвращает пароль для данной строки подключения. Затем установите SQLALCHEMY_CUSTOM_PASSWORD_STORE в файле конфигурации, чтобы он указывал на эту функцию.
def example_lookup_password(url): secret = <<get password from external framework>> return 'secret' SQLALCHEMY_CUSTOM_PASSWORD_STORE = example_lookup_password
Распространенным шаблоном является использование переменных среды, чтобы сделать секретные данные доступными. Также может быть использован для этой цели SQLALCHEMY_CUSTOM_PASSWORD_STORE.
def example_password_as_env_var(url): # assuming the uri looks like # mysql://localhost?superset_user:{SUPERSET_PASSWORD} return url.password.format(os.environ) SQLALCHEMY_CUSTOM_PASSWORD_STORE = example_password_as_env_var
SSL-доступ к базам данных
Этот пример работал с базой данных MySQL, для которой требуется SSL. Конфигурация может отличаться от других серверных частей. Это то, что было помещено в параметр Extra.
{ "metadata_params": {}, "engine_params": { "connect_args":{ "sslmode":"require", "sslrootcert": "/path/to/my/pem" } } }
Druid
- В пользовательском интерфейсе введите информацию о своих кластерах в меню Источники -> Druid Кластеры, нажав знак +;
- После ввода информации о подключении кластера Druid нажмите пункт меню «Источники» -> «Обновить метаданные Druid»;
- Перейдите к своим источникам данных.
Обратите внимание, что можно использовать команду superset refresh_druid для обновления метаданных в кластере (ах) Druid.
CORS
CORS можно установить следующим образом:
superset[cors]
Для настройки CORS необходимо прописать следующее в superset_config.py:
- ENABLE_CORS: должно быть установлено True, чтобы включить CORS;
- CORS_OPTIONS: параметры, переданные в Flask-CORS (документация http://flask-cors.corydolphin.com/en/latest/api.html#extension )
Промежуточное ПО
Superset позволяет добавлять собственное промежуточное ПО. Чтобы добавить собственное промежуточное ПО, обновите ADDITIONAL_MIDDLEWARE ключ в файле superset_config.py. ADDITIONAL_MIDDLEWARE должен быть списком Ваших дополнительных классов промежуточного программного обеспечения.
Например, чтобы использовать AUTH_REMOTE_USER из прокси-сервера, такого как nginx, вам нужно добавить простой класс промежуточного программного обеспечения, чтобы добавить значение HTTP_X_PROXY_REMOTE_USER (или любой другой пользовательский заголовок из прокси) в переменную среды Gunicorn REMOTE_USER.:
class RemoteUserMiddleware(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): user = environ.pop('HTTP_X_PROXY_REMOTE_USER', None) environ['REMOTE_USER'] = user return self.app(environ, start_response) ADDITIONAL_MIDDLEWARE = [RemoteUserMiddleware, ]
Материал взят и адаптирован из http://flask.pocoo.org/snippets/69/
Обновление
Для обновления используйте:
pip install superset --upgrade superset db upgrade superset init
SQL Lab
SQL Lab – мощное SQL IDE, которое работает со всеми базами данных, совместимыми с SQLAlchemy. По умолчанию запросы выполняются в рамках веб-запроса, поэтому время ожидания может истечь, поскольку запросы превышают максимальную продолжительность веб-запроса в Вашей среде, будь то обратный прокси-сервер или сам сервер Superset.
В больших аналитических базах данных обычно выполняются запросы, которые обрабатываются в течение нескольких минут или даже часов. Чтобы включить поддержку длительных запросов, необходимо настроить асинхронный сервер для Superset, который состоит из:
- одного или несколько рабочих процессов Superset (которые реализованы как рабочие процессы Celery) и могут быть запущены с помощью celery worker командой run celery worker --help для просмотра связанных параметров;
- брокера celery (очередь сообщений), для которого мы рекомендуем использовать Redis или RabbitMQ;
- серверной части результатов, которая определяет, где рабочий процесс будет сохранять результаты запроса.
Для настройки Celery требуется определить CELERY_CONFIG в Вашем файле superset_config.py. И рабочие процессы, и процессы веб-сервера должны иметь одинаковую конфигурацию:
class CeleryConfig(object): BROKER_URL = 'redis://localhost:6379/0' CELERY_IMPORTS = ('superset.sql_lab', ) CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_CONFIG = CeleryConfig
Чтобы запустить рабочий процесс Celery для использования конфигурации, выполните следующую команду:
celery worker --app=superset.sql_lab:celery_app --pool=gevent -Ofair
Чтобы настроить серверную часть результатов, Вам нужно передать экземпляр производной от cachelib.base.BaseCache в ключ конфигурации RESULTS_BACKEND в Вашем superset_config.py. Вы можете использовать Memcached, Redis, S3 (https://pypi.python.org/pypi/s3werkzeugcache ), память или файловую систему (в конфигурации с одним сервером или для тестирования) или написать свой собственный интерфейс кэширования. Ваш superset_config.py может выглядеть примерно так:
# On S3 from s3cache.s3cache import S3Cache S3_CACHE_BUCKET = 'foobar-superset' S3_CACHE_KEY_PREFIX = 'sql_lab_result' RESULTS_BACKEND = S3Cache(S3_CACHE_BUCKET, S3_CACHE_KEY_PREFIX) # On Redis from werkzeug.contrib.cache import RedisCache RESULTS_BACKEND = RedisCache( host='localhost', port=6379, key_prefix='superset_results')
Важно, чтобы все рабочие узлы и веб-серверы в кластере RT.DataVision использовали общую базу данных метаданных. Это означает, что SQLite не будет работать в этом контексте, поскольку он имеет ограниченную поддержку параллелизма и обычно находится в локальной файловой системе.
Также обратите внимание, что SQL Lab поддерживает шаблоны Jinja и что можно перегрузить контекст Jinja по умолчанию в Вашей среде, определив JINJA_CONTEXT_ADDONS в используемой конфигурации Superset. Объекты, на которые есть ссылки в этом словаре, доступны пользователям для использования в SQL.
JINJA_CONTEXT_ADDONS = { 'my_crazy_macro': lambda x: x*2, }
Flower — это веб-инструмент для мониторинга кластера Celery, который Вы можете установить через pip.
pip install flower
и запустить через:
celery flower --app=superset.sql_lab:celery_app
Сборка из исходников
Более продвинутые пользователи могут захотеть собрать Superset из исходников. Вы сможете разветвить проект, чтобы добавить функции, характерные для именно для Вашей среды. Смотрите CONTRIBUTING.md.
Blueprints
Blueprints – приложения Flask. Superset позволяет указать множество Blueprints в модуле superset_config. Вот пример того, как это может работать с простым Blueprint. Такой способ позволит добиться того, чтобы Superset обслуживал страницу, отвечающую «ОК» по URL-адресу /simple_page. Это может позволить Вам запускать другие приложения, например, для визуализации данных, вместе с Superset на одном сервере.
from flask import Blueprint simple_page = Blueprint('simple_page', __name__, template_folder='templates') @simple_page.route('/', defaults={'page': 'index'}) @simple_page.route('/<page>') def show(page): return "Ok" BLUEPRINTS = [simple_page]
StatsD
При желании Superset можно настроить для регистрации событий в StatsD. Большинство обращений к конечным точкам, а также ключевые события, такие как начало и завершение запроса, регистрируются в SQL Lab.
Чтобы настроить ведение журнала StatsD, нужно настроить регистрацию событий в файле superset_config.py.
from superset.stats_logger import StatsdStatsLogger STATS_LOGGER = StatsdStatsLogger(host='localhost', port=8125, prefix='superset')
Обратите внимание, что вы также можете реализовать свою собственную регистрацию событий, получив superset.stats_logger.BaseStatsLogger.
Запуск в Kubernetes
Установить Superset в Kubernetes можно с помощью Helm <https://helm.sh/>. Чарт находится в install/helm.
Команда для установки в Kubernetes:
helm upgrade --install superset ./install/helm/superset
Обратите внимание, что приведенная выше команда по умолчанию установит Superset в пространство имен Kubernetes.
Пользовательская конфигурация OAuth2
Помимо поставщиков, поддерживаемых FAB (Github, Twitter, LinkedIn, Google, Azure и т. д.), Superset легко подключить к другим представителям с OAuth2, которые поддерживают авторизацию «кода».
Сначала настройте авторизацию в superset_config.py.
AUTH_TYPE = AUTH_OAUTH OAUTH_PROVIDERS = [ { 'name':'egaSSO', 'token_key':'access_token', # Name of the token in the response of access_token_url 'icon':'fa-address-card', # Icon for the provider 'remote_app': { 'consumer_key':'myClientId', # Client Id (Identify Superset application) 'consumer_secret':'MySecret', # Secret for this Client Id (Identify Superset application) 'request_token_params':{ 'scope': 'read' # Scope for the Authorization }, 'access_token_method':'POST', # HTTP Method to call access_token_url 'access_token_params':{ # Additional parameters for calls to access_token_url 'client_id':'myClientId' }, 'access_token_headers':{ # Additional headers for calls to access_token_url 'Authorization': 'Basic Base64EncodedClientIdAndSecret' }, 'base_url':'https://myAuthorizationServer/oauth2AuthorizationServer/', 'access_token_url':'https://myAuthorizationServer/oauth2AuthorizationServer/token', 'authorize_url':'https://myAuthorizationServer/oauth2AuthorizationServer/authorize' } } ] # Will allow user self registration, allowing to create Flask users from Authorized User AUTH_USER_REGISTRATION = True # The default user self registration role AUTH_USER_REGISTRATION_ROLE = "Public"
Затем создайте CustomSsoSecurityManager расширение SupersetSecurityManager и переопределение в auth_user_info:
class CustomSsoSecurityManager(SupersetSecurityManager): def oauth_user_info(self, provider, response=None): logging.debug("Oauth2 provider: {0}.".format(provider)) if provider == 'egaSSO': # As example, this line request a GET to base_url + '/' + userDetails with Bearer Authentication, # and expects that authorization server checks the token, and response with user details me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data logging.debug("user_data: {0}".format(me)) return { 'name' : me['name'], 'email' : me['email'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''} ...
Наконец, добавьте следующие записи в superset_config.py:
from custom_sso_security_manager import CustomSsoSecurityManager CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager