环境:

mac 10.15 Catalina + Anaconda 3 + Python3.7 + superset 0.30

superset13

 Superset 是一款由 Airbnb 开源的“现代化的企业级 BI(商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案。
 Superset 的前端主要用到了 React 和 NVD3/D3,而后端则基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依赖库,主要提供了这几方面的功能:
 集成数据查询功能,支持多种数据库,包括 MySQL、PostgresSQL、Oracle、SQL Server、SQLite、SparkSQL 等,并深度支持 Druid。
 通过 NVD3/D3 预定义了多种可视化图表,满足大部分的数据展示功能。如果还有其他需求,也可以自开发更多的图表类型,或者嵌入其他的 JavaScript 图表库(如 HighCharts、ECharts)。
 提供细粒度安全模型,可以在功能层面和数据层面进行访问控制。支持多种鉴权方式(如数据库、OpenID、LDAP、OAuth、REMOTE_USER 等)。

17年装过一次,简单使用了一下,现在又开始使用supeset了。这次记录下问题,和安装步骤 因为之前安装过,导致残留。不能导入示例数据,不能创建用户等一些问题。

下面两种方式都是在Anaconda虚拟python环境中进行。

一.源码安装superset

首先,Anaconda 创建python环境

conda create -n superset python=3.7

  • 激活环境

conda activate superset

1.github 下载源码包

1
2
3
4
5
6
git clone https://github.com/apache/incubator-superset.git

git tag 列出所有版本号

#切换到自己想要的版本 
git checkout +某版本号

2.安装扩展依赖,及开发依赖(这里指定豆瓣源)

1
2
3
4
5
6
#进入到目录
cd incubator-superset
pip install -r requirements.txt -i https://pypi.douban.com/simple/

安装开发依赖
pip install -r requirements-dev.txt -i https://pypi.douban.com/simple/

3.安装superset

1
2
3
#incubator-superset 目录执行
pip install -e .

superset6

4.开始配置superset

1
2
3
4
5
6
7
创建管理员账户和密码
这个命令已经不推荐使用了。
fabmanager create-admin --app superset 
推荐使用
$export FLASK_APP=superset
flask fab create-admin

superset7

  • 以下操作要进入superset/bin目录下
1
2
3
4
5
6
7
8
9
#初始化数据库
python superset db upgrade

#初始化角色和权限
python superset init

#加载示例数据
python superset load_examples

5.安装编译前端文件,并进入前端开发者模式

wget https://nodejs.org/dist/v12.18.2/node-v12.18.2-linux-x64.tar.xz

解压 :

tar -xvf node-v12.18.2-linux-x64.tar.xz

建软链:

1
2
3
ln -s /xxxx/nodejs/bin/node /usr/local/bin/
ln -s /xxxxx/nodejs/bin/npm /usr/local/bin/ 

然后node -v 查看版本,查看正常即可

  • 设置npm为淘宝镜像

npm config set registry https://registry.npm.taobao.org

验证 `npm config get registry`
  • 进入superset/assets目录下(新版目录incubator-superset/superset-frontend/),安装编译所需模块

npm install -d

superset4

  • 编译前端文件,并进入前端开发者模式
1
2
npm run build
npm run dev

注:如果这两部编译失败,可能是因为nodejs版本过低。可尝试升级nodejs再试。

superset5

  • 运行完npm run dev,命令窗口会停止,不要误以为是执行不下去,保持窗口开启状态即可,一有文件变动时,它会重新编译

6、把项目导入到pyCharm

File -> New Project -> Location选择incubator-superset所在目录 -> 选择Existing interpreter -> 选择conda-> 选择你的环境

7、启动项目

两种方式都可启动,任选其一。

  1. 命令启动superset superset run -h 0.0.0.0 -p 8088

  2. 在 incubator-superset/superset 目录下新建 run.py,添加如下内容:

1
2
from superset import app
app.run(debug=True, host='0.0.0.0', port=8088)

等 pycharm 右下角 processes running 完成后就可以debug run.py了。访问:http://localhost:8088,输入管理员账号跟密码,登录。 superset8

二.pip安装superset

1.Anaconda 创建python环境

conda create -n superset python=3.7

  • 激活环境

conda activate superset

2.安装依赖包。

  • 具体的依赖包配置要去github找对应版本的根目录下的requirements.txt

  • raw的地址被污染不能用了。这里需要手动复制requirements.txt的内容创建一个文件

  • 以下是0.34.0对应的依赖的list,请注意选择自己版本的依赖。

    vim requirements.txt

复制以下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file=requirements.txt setup.py
#
alembic==1.0.11           # via flask-migrate
amqp==2.5.0               # via kombu
apispec[yaml]==1.3.3      # via flask-appbuilder
asn1crypto==0.24.0        # via cryptography
attrs==19.1.0             # via jsonschema
babel==2.7.0              # via flask-babel
billiard==3.6.0.0         # via celery
bleach==3.1.0
celery==4.3.0
cffi==1.12.3              # via cryptography
click==6.7
colorama==0.4.1
contextlib2==0.5.5
croniter==0.3.30
cryptography==2.7
decorator==4.4.0          # via retry
defusedxml==0.6.0         # via python3-openid
flask-appbuilder==2.1.13
flask-babel==0.12.2       # via flask-appbuilder
flask-caching==1.7.2
flask-compress==1.4.0
flask-jwt-extended==3.20.0  # via flask-appbuilder
flask-login==0.4.1        # via flask-appbuilder
flask-migrate==2.5.2
flask-openid==1.2.5       # via flask-appbuilder
flask-sqlalchemy==2.4.0   # via flask-appbuilder, flask-migrate
flask-talisman==0.7.0
flask-wtf==0.14.2
flask==1.1.1
future==0.17.1            # via parsedatetime
geographiclib==1.49       # via geopy
geopy==1.20.0
gunicorn==19.8.1
humanize==0.5.1
idna==2.8
isodate==0.6.0
itsdangerous==1.1.0       # via flask
jinja2==2.10.1            # via flask, flask-babel
jsonschema==3.0.1         # via flask-appbuilder
kombu==4.6.3              # via celery
mako==1.0.14              # via alembic
markdown==3.1.1
markupsafe==1.1.1         # via jinja2, mako
marshmallow-enum==1.4.1   # via flask-appbuilder
marshmallow-sqlalchemy==0.17.0  # via flask-appbuilder
marshmallow==2.19.5       # via flask-appbuilder, marshmallow-enum, marshmallow-sqlalchemy
numpy==1.17.0             # via pandas
pandas==0.24.2
parsedatetime==2.4
pathlib2==2.3.4
polyline==1.4.0
prison==0.1.2             # via flask-appbuilder
py==1.8.0                 # via retry
pycparser==2.19           # via cffi
pyjwt==1.7.1              # via flask-appbuilder, flask-jwt-extended
pyrsistent==0.15.4        # via jsonschema
python-dateutil==2.8.0
python-dotenv==0.10.3
python-editor==1.0.4      # via alembic
python-geohash==0.8.5
python3-openid==3.1.0     # via flask-openid
pytz==2019.2              # via babel, celery, pandas
pyyaml==5.1.2
retry==0.9.2
selenium==3.141.0
simplejson==3.16.0
six==1.12.0               # via bleach, cryptography, flask-jwt-extended, flask-talisman, isodate, jsonschema, pathlib2, polyline, prison, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
sqlalchemy-utils==0.34.1
sqlalchemy==1.3.6
sqlparse==0.3.0
urllib3==1.25.3           # via selenium
vine==1.3.0               # via amqp, celery
webencodings==0.5.1       # via bleach
werkzeug==0.15.5          # via flask, flask-jwt-extended
wtforms-json==0.3.3
wtforms==2.2.1            # via flask-wtf, wtforms-json

  • 安装依赖,指定国内pip速度飞起。

pip install -r requirements.txt -i https://pypi.douban.com/simple/

3.安装superset

  • 指定版本0.30.0,pip源目前为止最高版本为0.30.0

pip install superset==0.30.0 -i https://pypi.douban.com/simple/

4.开始配置初始化superset

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20

#创建管理用户及密码
$ export FLASK_APP=superset
flask fab create-admin
或者
fabmanager create-admin --app superset 


#初始化数据库
superset db upgrade

#初始化角色和权限
superset init

#加载示例数据
superset load_examples
superset load_examples

#debug模式启动,并指定8088端口
superset run -p 8088 --with-threads --reload --debugger

然后启动成功。浏览器访问 hugo1

登陆上面创建的管理用户和密码即可 superset2

superset12

三.问题与总结

记录:conda pip安装的路径 /opt/anaconda3/envs/superset/lib/python3.7/site-packages/superset

1.无法创建管理账户,需要保证email的唯一性,说明这个邮件已经被创建过,换一个邮件创建即可。 导致这个问题的原因是:之前安装过superset,没有删除遗留的supeset.db文件。

1
2
3
4
5
6
7
2020-02-21 18:16:07,701:INFO:root:Configured event logger of type <class 'superset.utils.log.DBEventLogger'>
Recognized Database Authentications.
2020-02-21 18:16:08,948:ERROR:flask_appbuilder.security.sqla.manager:Error adding new user to database. (sqlite3.IntegrityError) UNIQUE constraint failed: ab_user.email
[SQL: INSERT INTO ab_user (first_name, last_name, username, password, active, email, last_login, login_count, fail_login_count, created_on, changed_on, created_by_fk, changed_by_fk) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('admin', 'user', 'admin', 'pbkdf2:sha256:150000$lXoRkj1U$96d4f6c545b94200fabf2e0cee44e66ba928982109d926c75633c10db0a78d7a', 1, 'admin@superset.com', None, None, None, '2020-02-21 18:16:08.946516', '2020-02-21 18:16:08.946527', None, None)]
(Background on this error at: http://sqlalche.me/e/gkpj)
No user created an error occured
  1. superset load_examples times out with TimeoutError superset load_examples,无法导入数据,显示拒绝连接

    前天安装还好好的,今天不管是pip,还是源码安装都不行,我以为是我的安装问题 日志也没有详情,找错了方向,还以为是sqlite无法连接。 这个问题当误好大功夫。找了好久。。。。

后来找到了github 提交的issue,找到了问题的所在:

raw.githubusercontent.com域名解析污染了,的确ping raw.githubusercontent.com都是失败的

参考:

https://github.com/apache/incubator-superset/issues/8520

https://github.com/apache/incubator-superset/issues/8491

解决:

issues里说可以通过下载数据zip包,手动导入,但是没有给数据包url.下面用一个简单的方法,这里通过修改raw.githubusercontent.com的解析地址解决

首先通过ipaddress,找出raw.githubusercontent.com的ip地址。 hugo1

然后vim /etc/hosts添加

199.232.28.133 raw.githubusercontent.com

参考:

https://www.ioiox.com/archives/62.html

这个方法修改后是可以ping 通的。但是下载速度,就几kb,只能等,没办法了。

补充下后期安装0.36.0 npm run build遇到了一些问题

  1. loose不一致错误:
1
2
The "loose" option must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-private-property-in-object (when they are enabled): you can silence this warning by explicitly adding

修改文件:/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/supeset-frontend/babel.config.js

注释45行,添加49,50,将loose设置为true

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 42   plugins: [
 43     'lodash',
 44     '@babel/plugin-syntax-dynamic-import',
 45     //'@babel/plugin-proposal-class-properties',
 46     '@babel/plugin-proposal-optional-chaining',
 47     ['@babel/plugin-transform-runtime', { corejs: 3 }],
 48     'react-hot-loader/babel',
 49      ['@babel/plugin-proposal-private-methods', { 'loose': true }],
 50      ['@babel/plugin-proposal-class-properties', { 'loose': true }]
 51   ],
  1. “Property ‘hidden’ does not exist on type ‘HeaderGroup<{}>’”
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx
ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx(45,22):
TS2339: Property 'hidden' does not exist on type 'HeaderGroup<{}>'.

ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx
ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx(48,28):
TS2339: Property 'sortable' does not exist on type 'HeaderGroup<{}>'.

ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx
ERROR in /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx(54,27):
TS2339: Property 'sortable' does not exist on type 'HeaderGroup<{}>'.

解决方法:

修改 /data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/src/components/ListView/TableCollection.tsx文件。

修改44行,修改前

{headerGroup.headers.map(column =>

修改后

{headerGroup.headers.map((column:any) =>

修改82行,修改前

{row.cells.map(cell:any => {

修改后

{row.cells.map((cell:any) => {

  1. ‘Error: ENOSPC: System limit for number of file watchers reached, watch’
1
2
3
Error from chokidar (/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib): Error: ENOSPC: System limit for number of file watchers reached, watch '/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib/camelizeStyleName.js'
Error from chokidar (/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib): Error: ENOSPC: System limit for number of file watchers reached, watch '/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib/camelizeStyleName.js.flow'
Error from chokidar (/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib): Error: ENOSPC: System limit for number of file watchers reached, watch '/data/deploy_tools/deploy_superset/incubator-superset-0.36.0/superset-frontend/node_modules/fbjs/lib/compactArray.js'^C

解决方法:

修改系统监视文件的数量:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

superset搭建记录就完成了。下一篇集成echart