window11 搭建superset1.3.1开发环境

1、superset版本:1.3.1
2、window版本:11
3、python 版本:3.8(3.7以上的应该都可以)
4、Node.js 版本:12.14.1;npm 版本:7.5.4
补充:Node和npm的版本是superset要求的版本,我实测了更低的node版本,刚开始superset前端可以正常启动,只是控制台会出各种警告而已,过了一天前端就启动不了了(没动过前端代码),对于前端不熟的我完全找不到问题,说多了都是泪啊,前端环境还是按着提示安装吧)

一、superset下载

下面是下载地址,我下载的是1.3.1版本,下载zip压缩包,解压
Tags · apache/superset · GitHub

二、搭建superset后端

1、创建虚拟环境(python3.7或3.8都可以),之后激活虚拟环境,进入项目根目录superset-1.3.1,后续命令需要在虚拟环境下运行。

2、安装后端项目依赖包

2.1、离线安装部分包

有部分包(如geohash)无法通过pip在线安装,需要自行去三方平台下载离线包
这里提供个网站供大家参考,请根据自己python版本下载对应的离线包
Python Extension Packages for Windows - Christoph Gohlke (uci.edu)

我的python版本是3.8,window,amd64 ,所以下载的包就是
python_geohash-0.8.5-cp38-cp38-win_amd64.whl
下载之后在虚拟环境下直接安装该包即可,命令如下:

pip install python_geohash-0.8.5-cp38-cp38-win_amd64.whl
2.2、在线安装部分其他依赖包

虚拟环境路径记得切换回项目根目录superset-1.3.1,即setup.py文件的同级目录
执行命令:

pip install -e .
pip install pillow

补充:pillow也需要额外安装,否则启动服务时会警告No PIL installation found(不安装不影响使用,但控制台的警告日志看着不舒服)

3、修改数据源为mysql

superset后端是基于Flask AppBuilder框架,所以修改配置的方式和F·A·B框架一样,都是改配置文件superset-1.3.1\superset\config.py。其他配置可以参考官方文档,本文仅介绍如何修改数据源。
Base Configuration — Flask AppBuilder

3.1、安装支持mysql的模块

由于前面superset默认没有安装支持MySQL的包,所以这里需要额外安装包来支持MySQL。

pip install mysqlclient

如果没安装该模块,当修改数据源配置为mysql时,启动服务会报错
ModuleNotFoundError: No module named 'MySQLdb'
因为MySQLdb模块不支持python3,所以这里改安装mysqlclient包。(这里有另外一种解决方案,就是去修改代码,但这里不推荐)。

3.2、修改配置文件superset-1.3.1\superset\config.py

将默认的sqlite改为mysql

# SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
SQLALCHEMY_DATABASE_URI = 'mysql://root:root@localhost:3307/superset1?charset=utf8'

mysql8默认不开启远程登录,如果发现登录不上,则需要到MySQL里面进行配置, MYSQL8无法远程登录

4、修改缓存配置(此步骤可省略)

依旧是在config.py文件内修改,修改下面两个变量

# Default cache for Superset objects
# CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}

# Cache for datasource metadata and query results
# DATA_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
DATA_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}

不修改不会影响后端服务启动,但是每次启动都会出现日志警告,如下

 Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.

5、初始化用户和权限的相关表

执行下面命令,启动superset命令,superset第一次启动后,会在自动检查数据库,并自动创建用户和权限的相关表(这是基于Flask AppBuilder框架完成的,有兴趣可以看一下Flask AppBuilder)

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

启动完成后,按Ctrl+C关闭superset服务(命令窗口要用来执行其他命令)。

6、创建管理员账号(基于Flask AppBuilder)

superset fab create-admin

按提示创建管理员账号即可

7、更新superset的相关数据模型(即在数据库生成superset的数据表)

superset db upgrade

8、导入superset的案例(要梯子的,可以忽略此步骤)

superset load_examples

9、初始化superset(视图权限,即各个角色的访问权限)

superset init

到这里,后端就搭建完成了

10、启动后端服务

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

搭建完成,控制台提示可访问:
http://127.0.0.1:8088/
如果能正常打开登录页面,且用户名密码登录后没提示密码错误,那后端就是搭建成功了。(登录进去后页面空白,这个问题我还没解决,暂时不影响superset的搭建)

11、补充

11.1、superset的8088端口登录成功后一片空白(看的怀疑人生)。因为superset的后端是基于Flask AppBuilder框架,8088端口登录的实际上是Flask AppBuilder的后台管理。而superset只是使用Flask AppBuilder框架的后端,不是后台页面,所以暂时可以这里可以忽略过。
11.2、后端服务启动成功后,窗口就不要关闭后,重新开个窗口运行前端的服务。

三、搭建superset前端

新开一个命令行窗口,进入到目录superset-1.3.1\superset-frontend(package.json文件同级目录)。

1、编译项目

执行命令npm install

编译完成后,我这边提示内容如下

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

added 4565 packages from 2257 contributors in 158.861s

233 packages are looking for funding
  run `npm fund` for details

注意,如果当前npm版本不符合superset的要求,控制台日志会做出相应提醒,如下

npm WARN old lockfile
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.5', npm: '^7.5.4' },
npm WARN EBADENGINE   current: { node: 'v12.14.1', npm: '8.0.0' }
npm WARN EBADENGINE }

如果npm版本不对,使用下面命令安装指定提示版本即可

npm install [email protected] -g

2、修改superset-1.3.1\superset-frontend\webpack.config.js文件

找到下面代码的位置

{
    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/,
    ],
    use: [babelLoader],
},

加上一行代码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],
},

3、运行前端服务npm run dev-server

运行成功后提示如下:

98% after emitting SizeLimitsPluginNo type errors found
Version: typescript 4.3.5
Time: 78223ms
‼ 「wdm」:    12129 modules

4、访问superset页面

http://localhost:9000/
superset正常打开,superset搭建结束

5、补充

5.1、没修改webpack.config.js直接启动前端服务将会报错Failed to compile.
5.2、npm run dev-server无法直接运行, 查看package.json,发现该快捷命令如下
"dev-server": "cross-env NODE_ENV=development BABEL_ENV=development node --max_old_space_size=4096 ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode=development",

在老版本的superset里面,"dev-server"命令里面是没有包含cross-env关键字的,因此无法直接运行"dev-server",需要将该命令拆分为下面三个命令执行。

set NODE_ENV=development
set BABEL_ENV=development
node --max_old_space_size=4096 ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode=development

或者手动在该命令里面加上cross-env关键字,如上。

你可能感兴趣的:(window11 搭建superset1.3.1开发环境)