环境:
mac 10.15 Catalina + Anaconda 3 + Python3.7 + superset 0.30
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 .
|
4.开始配置superset
1
2
3
4
5
6
7
|
创建管理员账户和密码
这个命令已经不推荐使用了。
fabmanager create-admin --app superset
推荐使用
$export FLASK_APP=superset
flask fab create-admin
|
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 config set registry https://registry.npm.taobao.org
验证 `npm config get registry`
- 进入superset/assets目录下(新版目录incubator-superset/superset-frontend/),安装编译所需模块
npm install -d
1
2
|
npm run build
npm run dev
|
注:如果这两部编译失败,可能是因为nodejs版本过低。可尝试升级nodejs再试。
- 运行完npm run dev,命令窗口会停止,不要误以为是执行不下去,保持窗口开启状态即可,一有文件变动时,它会重新编译
6、把项目导入到pyCharm
File -> New Project -> Location选择incubator-superset所在目录 -> 选择Existing interpreter -> 选择conda-> 选择你的环境
7、启动项目
两种方式都可启动,任选其一。
-
命令启动superset superset run -h 0.0.0.0 -p 8088
-
在 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,输入管理员账号跟密码,登录。
二.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 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
|
然后启动成功。浏览器访问
登陆上面创建的管理用户和密码即可
三.问题与总结
记录: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
|
-
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地址。
然后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遇到了一些问题
- 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 ],
|
- “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) => {
- ‘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