简介

Apache Superset 是一个现代化的、企业就绪的商业智能 Web 应用程序。它 快速、轻量级、直观,并加载了各种选项,使所有技能的用户都可以轻松使用 用于探索和可视化其数据的集合,从简单的饼图到高度详细的 deck.gl 地理空间图表。

Superset 的前端主要用到了 ReactNVD3/D3,而后端则基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依赖库,主要提供了这几方面的功能:

  • 直观的界面,用于可视化数据集和制作交互式仪表板

  • 各种精美的可视化效果来展示您的数据

  • 用于提取和呈现数据集的无代码可视化构建器

  • 用于准备可视化数据的世界级 SQL IDE,包括丰富的元数据浏览器

  • 轻量级语义层,使数据分析人员能够快速定义自定义维度和指标

  • 对大多数 SQL 数据库的开箱即用支持

  • 无缝的内存中异步缓存和查询

  • 一种可扩展的安全模型,允许配置非常复杂的规则,以确定谁可以访问哪些产品功能和数据集

  • 与主要身份验证后端(数据库、OpenID、LDAP、OAuth、REMOTE_USER等)集成

  • 添加自定义可视化插件的能力

  • 用于编程自定义的 API

  • 专为扩展而设计的云原生架构

Superset也是云原生的,因为它很灵活,允许您选择:

  • Web服务器(Gunicorn,Nginx,Apache),

  • 元数据数据库引擎(MySQL,Postgres,MariaDB等),

  • 消息队列(Redis,RabbitMQ,SQS等),

  • 结果后端(S3,Redis,Memcached等),

  • 缓存层(Memcached,Redis等),

Superset还可以与NewRelic,StatsD和DataDog等服务很好地配合使用,并且能够运行。 针对最常用数据库技术的分析工作负载。

配置Python环境

Superset是由Python语言编写的Web应用,要求Python3.6的环境

如果不配置环境,直接使用最新的3.10版本会出现如下错误:

1. 安装Miniconda

conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python

1.1 下载Miniconda(Python3版本)

下载地址:https://repo.anaconda.com/miniconda/

根据系统环境,选择 Miniconda3-latest-Linux-x86_64.sh

1.2 安装Miniconda

执行以下命令进行安装,并按照提示操作,直到安装完成

1
2
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

在安装过程中,出现以下提示时,可以指定安装路径

出现以下字样,即为安装完成

1.3 配置环境变量

运行如下命令:

1
2
export CONDA_HOME=/root/allen/miniconda3
export PATH=$PATH:$CONDA_HOME/bin

重启一下虚拟机。

1.4 取消激活base环境

Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境

如果不关闭,就会自动激活base环境

1
conda config --set auto_activate_base false

2. 创建Python3.6环境

2.1 配置conda国内镜像

1
2
3
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes

查看下 .condarc 文件,是否是如下配置

1
cat ~/.condarc 

输出内容如下:

1
2
3
4
5
6
auto_activate_base: false
channels:
- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- defaults
show_channel_urls: true

2.2 创建Python3.6环境

1
conda create -n superset python=3.6

conda环境管理常用命令,其中的name是环境名称

1
2
3
4
5
>conda create -n env_name  #创建环境

>conda info --envs #查看所有环境

>conda remove -n env_name --all #删除一个环境

2.3 激活superset环境

激活环境:

1
conda activate superset

激活后效果如下图所示:

退出环境:

1
>conda deactivate

2.4 执行 python 命令查看python版本

安装Superset

官方安装文档

1. 安装依赖

1
sudo apt install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev

2. Python虚拟环境

官方流程中有这一步,可以省略,前面已经通过Miniconda创建了虚拟环境

1
2
apt install python3-venv
pip install virtualenv

创建和激活虚拟环境

1
2
python3 -m venv venv
. venv/bin/activate

3. 安装

3.1 安装(更新)setuptools和pip

1
pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/

-i 的作用是指定镜像,这里选择国内镜像

3.2 安装Superset

1
pip install apache-superset -i https://pypi.douban.com/simple/

安装成功:

4. 初始化数据库

1
superset db upgrade

这边是个大坑,可以参考下面的错误提示:

错误提示1:

1
ImportError: cannot import name '_ColumnEntity'

执行以下安装:

1
pip install sqlalchemy==1.3.24

错误提示2:

1
ModuleNotFoundError: No module named 'dataclasses'

执行以下安装:

1
pip install dataclasses

错误提示3:

1
ModuleNotFoundError: No module named 'cryptography.hazmat.backends.openssl.x509'

执行以下安装:

1
pip install cryptography==2.5

错误提示4:

1
INFO:superset.utils.screenshots:No PIL installation found

执行以下安装:

1
pip install pillow

错误提示5:

1
2
/root/venv/lib/python3.6/site-packages/flask_caching/__init__.py:202: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
"Flask-Caching: CACHE_TYPE is set to null, "

根据上面的路径,修改python3.6/site-packages/superset/config.py

1
2
3
4
5
6
7
8
9
THUMBNAIL_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
修改为
THUMBNAIL_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null", "CACHE_NO_NULL_WARNING": True}

CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
修改为
CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}
TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}

如果你遇到其他错误,在网上查一下还是能够轻松解决的。

5. 创建管理员用户

给superset创建管理员用户,分别执行下面命令:

1
2
export FLASK_APP=superset
superset fab create-admin

设置用户名与密码,其他的可以不用设置,直接 enter 就行

flask是一个python web框架,Superset使用的就是flask

6. 初始化

1
2
superset load_examples  #可选,加载一些示例
superset init

启动Superset

运行以下命令:

1
superset run -p 8088 --with-threads --reload --debugger

配置反向代理

简单的模版:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
listen [::]:80;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://localhost:8088/;
}
}

访问

对接数据库

Superset默认使用sqllite。还支持其他数据库,参考Install Database Drivers

最后

这个安装Superset就完成了。

这个程序的安装复杂程度超出了我的想象,容我再重新理一下,再来分享一下使用细节。