环境:
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 下载源码包 git clone https://github.com/apache/incubator-superset.git git tag 列出所有版本号 #切换到自己想要的版本 git checkout +某版本号
2.安装扩展依赖,及开发依赖(这里指定豆瓣源) #进入到目录 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 #incubator-superset 目录执行 pip install -e .
4.开始配置superset 创建管理员账户和密码 这个命令已经不推荐使用了。 fabmanager create-admin --app superset 推荐使用 $export FLASK_APP=superset flask fab create-admin
#初始化数据库 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
建软链:
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
注:如果这两部编译失败,可能是因为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,添加如下内容:
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
复制以下内容
# # 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 #创建管理用户及密码 $ 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文件。
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遇到了一些问题
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
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<{}>’”
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’
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