Superset部署文档
测试部署
基于ubt22.04系统部署的源码包(4.1.1)
Superset是一款python开发的现代数据探索和数据可视化平台
- 我们安装所需要的依赖
apt install -y build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev
- 这里我们使用MySQL作为superset的元数据库
-下载数据库(支持5.xx 8.xx版本)(这里我用的mysql8.0.40版本)
-可以取MySQL官网下载,也可以apt list mysql 查看包,选择下载
- 根据需求配置MySQL数据库
- 启动MySQL
- systemctl enable --now mysql.service
- 进入到数据库创建superset元数据
- CREATE DATABASE superset DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- 创建superset用户,并赋予权限
- create user superset@'%' identified WITH mysql_native_password BY '123456';
- grant all privileges on *.* to superset@'%' with grant option;
- flush privileges;

- 为superset创建python虚拟环境
- 为什么要创建虚拟环境:避免依赖冲突,便于管理,权限问题,易于调试。
- 也可以不创建虚拟环境,但是要保证python的环境是干净的。
- 更新pip
- pip install --upgrade pip
- 下载必要的虚拟环境包
- pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
- 创建虚拟环境
- virtualenv superset
- 激活虚拟环境
- source superset/bin/activate
- 安装superset
- pip install apache-superset -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装其他python的依赖
- pip install gunicorn pymysql mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple
- 如果安装失败,可能的原因:
- 没有pkg-config libmysqlclient-dev依赖,通过apt下载
- 因为是自定义安装的数据库,可能需要添加环境变量:export MYSQLCLIENT_CFLAGS="-I/path/to/mysql/include" export MYSQLCLIENT_LDFLAGS="-L/path/to/mysql/lib"
- 然后再重新下载
- 配置superset
- 在~/superset/bin目录下创建superset配置文件superset_config.py,详细配置可参考官 方文档(https://superset.apache.org/docs/installation/configuring-superset/)或者 GitHub(https://github.com/apache/superset/)
配置:
# Superset specific config
ROW_LIMIT = 5000
#SUPERSET_WEBSERVER_PORT = 8088
# Flask App Builder configuration
# Your App secret key will be used for securely signing the session cookie
# and encrypting sensitive information on the database
# Make sure you are changing this key for your deployment with a strong key.
# You can generate a strong key using `openssl rand -base64 42`
'''
使用命令“openssl rand -base64 42”创建SECRET_KEY填写到下面'''
SECRET_KEY = 'Zk8hZWzuvPU4Pjdf19KDPYY+SfpZkLRgEIJpdVSpx6mSfcw7Sah8mv59'
# 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
'''
数据库连接,我是用的是MySQL数据库
链接字符串:mysql+pymysql://<数据库用户>:<密码>@<主机名/ip>/<数据库名>'''
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://superset:superset@localhost:3306/superset?charset=utf8'
ENABLE_CSRF_PROTECTION = True
# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
WTF_CSRF_CHECK_DEFAULT = 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
#不填这个会出现登录界面输入正确的用户名和密码后登录无反应的现象
#但是关掉这个可能会降低安全性,可能是superset版本太新(3.0.0),旧版本貌似没有这个问题
TALISMAN_ENABLED=False
# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
COMPRESS_REGISTER = False
#默认中文
BABEL_DEFAULT_LOCALE = "zh"
#superset支持的语言
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
"fr": {"flag": "fr", "name": "French"},
"zh": {"flag": "cn", "name": "Chinese"},
"ja": {"flag": "jp", "name": "Japanese"},
"de": {"flag": "de", "name": "German"},
"pt": {"flag": "pt", "name": "Portuguese"},
"pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
"ru": {"flag": "ru", "name": "Russian"},
"ko": {"flag": "kr", "name": "Korean"},
"sk": {"flag": "sk", "name": "Slovak"},
"sl": {"flag": "si", "name": "Slovenian"},
"nl": {"flag": "nl", "name": "Dutch"},
}
SHOW_STACKTRACE = False
DEBUG = False
APP_NAME = "Superset"
#不填这个会导致报错如下
#ModuleNotFoundError: No module named 'MySQL_db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
- 初始化superset
- 初始化数据库
- (superset) [root@supserset ~]# export FLASK_APP=superset
- (superset) [root@supserset ~]# superset db upgrade
- 在元数据库中创建一个superset管理员用户
- (superset) [root@supserset ~]# superset fab create-admin
- 初始化superset
- (superset) [root@supserset ~]# superset init
- 启动superset
- (superset) [root@supserset ~]# gunicorn --workers 3 --timeout 120 --bind 10.0.0.209:8787 "superset.app:create_app()" --daemon
(提示:这里你的地址写你自己的地址--workers表示进程数,--timeout表示如果workers进程超时的话,会自动重启,--bind表示要绑定的本机的地址,--daemon表示后台运行 )
- 登入测试:10.0.0.209:8787

账号密码则是:你之前创建管理员用户的时候输入的账户密码。
- 我们可以写启动脚本
- 先停止superset
- 退出虚拟环境:deactivate
- 创建启动脚本:vim superset.sh
#!/bin/bash
##############################################################
# File Name:superset.sh
# Version:ubt22.04
# Author:lcqqqqqqqq
# Organization:.....
# Desc:
##############################################################
superset_status(){
result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l`
if [[ $result -eq 0 ]]; then
return 0
else
return 1
fi
}
superset_start(){
source ~/.bashrc
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
source ~/superset/bin/activate ; gunicorn --workers 3 --timeout 120 --bind 10.0.0.209:8787 --daemon 'superset.app:create_app()'
else
echo "superset正在运行"
fi
}
superset_stop(){
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "superset未在运行"
else
ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
fi
}
case $1 in
start )
echo "启动Superset"
superset_start
;;
stop )
echo "停止Superset"
superset_stop
;;
restart )
echo "重启Superset"
superset_stop
superset_start
;;
status )
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "superset未在运行"
else
echo "superset正在运行"
fi
esac

Comments NOTHING