superset安装

1,483 阅读4分钟

前提

  • 仅供参考

介绍

superset是一个现代数据分析、可视化平台、企业级商业智能(BI)web应用。

superset是以Python + Flask + React + Redux + SQLAlchemy 技术为主的项目架构。

环境准备

以下的所有操作基于superset 1.3.0版本为例,

  1. 后端环境推荐:python3.73.8
  • 可使用pyenvpython版本管理工具来安装
  • win系统安装pyenv,可用choco install pyenv-win安装(免环境变量配置等其他问题)
  • 相关python库在线安装不了的,建议离线安装
  • 推荐在项目目录创建虚拟环境目录
  • 如果提示pip需要升级,可升
  1. 前端推荐node ^14.15.5npm ^7.5.4
  • node自带对应的npm
  • 可使用nvmn等版本管理工具来安装node
  1. win系统
  • 可能缺少常用c++库,自行下载安装

使用 pip 安装软件时,会比较慢,可以设置 pip 为国镜像:

  1. 清华镜像:https://pypi.tuna.tsinghua.edu.cn/simple/
  2. 阿里云镜像:https://mirrors.aliyun.com/pypi/simple/
  3. 豆瓣镜像:http://pypi.douban.com/simple/
  4. 中科大镜像:https://pypi.mirrors.ustc.edu.cn/simple/
  5. 官方镜像 https://pypi.org/simple

以下直接设置 pip 清华镜像为全局配置:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 设置全局环境

pip install -i https://pypi.doubanio.com/simple/ flask
# 设置临时源

mysql数据库

pip install mysql-connector-python
# 由于新版mysql8的升级,可使用这个驱动

pip install mysqlclient
# 低于mysql8的可使用这个驱动

其他数据库驱动点击此处

使用docker安装并运行

  1. 安装docker工具
  2. 拉取superset镜像,你可以执行镜像版本
docker pull apache/superset # 拉取镜像
docker run -d -p 8080:8088 --name superset apache/superset
# 启动镜像并映射到主机 8080的端口
  1. 初始化Superset实例
# 设置本地superset系统管理员账户
$ docker exec -it superset superset fab create-admin \
              --username admin \
              --firstname Superset \
              --lastname Admin \
              --email admin@superset.com \
              --password admin

# 将本地数据库迁移到最新版本
$ docker exec -it superset superset db upgrade
# 加载例子(可忽略,慢需要翻墙)
$ docker exec -it superset superset load_examples
# 初始化设置角色
$ docker exec -it superset superset init
# 登录账号:[admin/admin]
http://localhost:8080/login/

docker 映像仅包含基本 Superset 构建,不包括您需要连接到分析数据库的数据库驱动程序(MySQL、Postgres、BigQuery、Snowflake、Redshift 等)。这是故意的,因为其中许多驱动程序没有 Apache-兼容许可证,我们不希望使用环境中不需要的软件包来膨胀镜像

基于上面镜像编写一个简单的 Dockerfile 文件,重新构建镜像

FROM apache/superset
# 切到root用户安装需要的软件
USER root
RUN apt-get update
# 安装vi
RUN apt-get install vim -y
# 切回 superset 用户
USER superset

启动容器后,进入容器,找到文件,修改数据库连接,重启容器,重新初始化Superset实例

# 进入容器
docker exec -it superset bash  

# 文件superset\config.py:

#SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://root:root@10.34.23.17:3306/mydatabase'

使用python来安装

pip install apache-superset
# 安装apache-superset工具

之后就是初始化superset实例并运行。

使用源码运行

您已安装好python3.73.8环境,以及需要的其他环境工具

git clone https://github.com/apache/superset.git
# 克隆项目

cd superset
# 进入项目

virtualenv env 
# 利用`virtualenv`等工具在项目目录创建虚拟环境

env\\Scripts\\activate
#win-激活环境cmd  

source env/Scripts/activate
# 激活环境, linux的Scripts可能需要改为 bin

deactivate
#退出虚拟环境

pip install -r requirements/base.txt
# 安装项目依赖base

pip install -r requirements/development.txt
# 安装开发所需依赖

pip install -e .
# #安装 superset 开发者模式

以上的python依赖可离线安装,如果慢请更换指定的源 如: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow

更换数据库链接

由于默认使用的是自带本地文件数据库,因此我们需要指定自己的数据库, 进入superset\config.py文件,修改数据库链接,

请安装指定的数据库驱动,如mysql的驱动 pip install mysql-connector-pythonpip install mysqlclient

# SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://root:root@10.34.23.17:3306/mydatabase'

初始化superset实例

# 设置本地superset系统管理员账户
$ docker exec -it superset superset fab create-admin \
              --username admin \
              --firstname Superset \
              --lastname Admin \
              --email admin@superset.com \
              --password admin

# 将本地数据库迁移到最新版本
$ docker exec -it superset superset db upgrade
# 加载例子(可忽略,慢需要翻墙)
$ docker exec -it superset superset load_examples
# 初始化设置角色
$ docker exec -it superset superset init
# 登录账号:[admin/admin]
http://localhost:8080/login/

# 要在端口8088上启动开发web服务器,请使用-p绑定到另一个端口
superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger

如果此时你修改了python的源代码,需要重新执行pip install -e .,并重启才生效

前端项目命令

进入项目的前端文件目录superset-frontend

npm i 
#安装依赖

npm run dev
#启动开发会产生新的superset/static 前端文件

npm run prod
#构建生产,会生成前端文件

安装完后,修改superset\superset-frontend\webpack.config.js,将原来的jsx 的这块类似语句改为下面的 注意啊,一定要改,否则编译不通过,尤其注意path.resolve(__dirname, './src')这句

{
test: /\.jsx?$/,
// include source code for plugins, but exclude node_modules and test files within them
exclude: [/superset-ui.*\/node_modules\//, /\.test.jsx?$/],
include: [
        new RegExp(`${APP_DIR}/src`),
        /superset-ui.*\/src/,
        new RegExp(`${APP_DIR}/.storybook`),
        /@encodable/,
        path.resolve(__dirname, './src'),
],
use: [babelLoader],
},

问题

  1. 安装python_geohash包失败, 到www.lfd.uci.edu/~gohlke/pyt…下载对应版本的包
pip install E:\\python_geohash-0.8.5-cp38-cp38-win_amd64.whl
# 38对应python3.8 其他类推
  1. 依赖慢
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
# 指定清华源来安装
  1. 数据库中文乱码问题
  • 链接参数增加中文
charset=utf8
  1. 前端报"export 'FeatureFlagMap' was not found in '@superset-ui/core'
    • 前端编译报警告,直接不用理会,代码依旧可运行
  2. 缓存问题
    • 有时发现页面不变化,把登录过帐号的session等本地缓存清除掉,再试

相关链接

  1. 微软常用运行库合集
  2. 数据库驱动安装
  3. pythonlibs