Superset部署
一、前言
暑期实习倒数第三个工作日,实在是看不下去源码了,一周从头开始做一个可视化工具然后给人家留个烂尾项目也不现实。pgAdmin4对于PostgreSQL的支持很完美,包括备份与还原都支持,但是实在是没有二次开发的教程。昨晚看到一个Superset,看起来不错而且也看到不少二次开发的博客(虽然基本都没写什么内容),尝试部署一下,如果能改个前端那就最好了。
二、部署
Linux系统可以用Docker快速部署,Windows则需要通过Python进行安装。
2.1 Linux
2.1.1 安装Docker
yum -y install docker
systemctl start docker
2.1.2 部署superset镜像
# 查询存在的superset镜像
docker search superset
# 下载官方镜像
docker pull docker.io/amancevice/superset
# 查看镜像
docker images
# 启动镜像
docker run -d -p 8088:8088 -v /root/superset:/home/superset amancevice/superset
# 查询容器id
docker ps
接下来需要按照官方教程里的语句进行初始化:
# 初始化数据库
docker exec -it {容器id} superset db upgrade
# 创建一个管理员用户
docker exec -it {容器id} superset fab create-admin
# 可选,加载示例
docker exec -it {容器id} superset load_examples
# 初始化
docker exec -it {容器id} superset init
现在你可以在浏览器中打开:http://localhost:8088,并使用刚刚创建的管理员用户进行登录
2.2 Windows
由于Windows只有专业版才可以安装Docker(或v2004以上使用WSL2.0),所以我们只能从头依赖开始慢慢安装。
2.2.1 系统依赖
superset使用了cryptography这个python库对连接密码进行加密,由于这个库有操作系统级别的依赖,所以需要如下方式安装:
- 下载get-pip.py,并执行
python get-pip.py(可能需要管理员权限) pip install cryptography
2.2.2 虚拟环境
官方推荐使用python虚拟环境来安装superset,我本机由于一些原因直接安装在了全局,有需要可以搭建虚拟环境:
# 搭建虚拟环境
python3 -m venv venv
# 启动虚拟环境
venv\Scripts\activate
# 关闭虚拟环境
venv\Scripts\deactivate
2.2.3 安装工具
pip install --user --upgrade setuptools pip
此处若不加入–user则可能失败
2.2.4 superset安装
# 安装superset
pip install apache-superset
# 以下语句可能需要在 /superset/bin 中才可执行
# 初始化数据库
python superset db upgrade
# 创建管理员用户
python superset fab create-admin
# 可选,加载样例
python superset load_examples
# 初始化
python superset init
# 开始运行
python superset run -p 8088 --with-threads --reload --debugger
如果在虚拟环境中启用,则不需要前面的python前缀。
三、数据库连接
用浏览器打开http://localhost:8088,登陆创建的管理员帐号,在Sources中选择Databases就可以添加新的数据库。
superset使用的是SqlAlchemy的连接方式,对于PostgreSQL,在URI中应该输入:
postgresql://{username}:{password}@{ip}:{port}/{database}
例如:postgresql://postgres:postgres@localhost:5432/superset。
下方部分权限设置如下:
- Asynchronous Query Execution,异步查询。
- Allow CSV Upload,允许上传CSV更新数据库
- Allow CREATE TABLE AS,在SQL Lab中允许CREATE TABLE AS
- Allow CREATE VIEW AS,在SQL Lab中允许CREATE VIEW AS
- Allow DML,允许用户在SQL Lab中执行Select以外的语句
四、可视化
superset的可视化在Charts中,但是想要可视化我们必须先指定需要可视化的表。
在Sources-Tables添加新的记录,选择加入的PostgreSQL数据库,并填写模式和表名。
然后再进入Charts点击添加新的记录,此时就可以选择刚刚加入的表作为数据源了。点击Choose a visualization type可以选择可视化类型(后面可以修改),需要可视化图层可以过滤:deck.gl
4.1 Mapbox
配置完可视化图层并点击run后,你可能会看到提示:“NO_TOKEN_WARNING”,这是因为superset使用MapBOX作为最底层的图层,而它需要api key去调用。
首先去MapBox官网注册一个帐号,注册成功之后在Tokens中就可以看到自动分配的api密钥了。
然后你需要将这个密钥配置为环境变量,Linux下为:
export MAPBOX_API_KEY=<your_access_token>
Windows下,你只需要在/superset目录下找到config.py,并在其中进行配置:
# Set this API key to enable Mapbox visualizations
# MAPBOX_API_KEY = os.environ.get("MAPBOX_API_KEY", "")
MAPBOX_API_KEY = "你的密钥"
效果如下图:

五、Windows使用常见错误
我发现大多数这种开源项目对Windows的支持都很一般,Superset也不例外。看了看github上的issue,在2018年之前甚至是完全不支持Windows,好在现在多数功能都兼容,但是不论安装还是适配,Win上都要麻烦很多。
5.1 No module named psycopg2
在连接PostgreSQL数据库时,如果显示这个错误,那么说明你缺少了psycopg2这个包:
pip install psycopg2
注意,如果在Linux系统下缺少该包,那么你需要先yum install postgresql-devel,否则会提示"pg_config executable not found"
5.2 Module signal has no attribute SIGALRM
在使用SqlLab查询时会提示该错误。这个问题是由于signal包在Windows平台下只有如下几个信号:
- SIGABRT
- SIGFPE
- SIGILL
- SIGINT
- SIGSEGV
- SIGTERM
因此调用时会报错,解决办法为:修改site-packages/superset/utils/core.py中的__enter__和__exit__两个函数的内容如下:
def __enter__(self) -> None:
try:
# signal.signal(signal.SIGALRM, self.handle_timeout)
# signal.alarm(self.seconds)
pass
except ValueError as ex:
logger.warning("timeout can't be used in the current context")
logger.exception(ex)
def __exit__( # pylint: disable=redefined-outer-name,unused-variable,redefined-builtin
self, type: Any, value: Any, traceback: TracebackType
) -> None:
try:
#signal.alarm(0)
pass
except ValueError as ex:
logger.warning("timeout can't be used in the current context")
logger.exception(ex)
六、二次开发
如果需要从源码进行编译,或者对superset进行二次开发,那么可以参考官方给出的搭建本地开发环境教程,或者参考一下博客:
1818



被折叠的 条评论
为什么被折叠?



