Superset部署手册
Superset是一个airbnb贡献出开源的BI工具,在airbnb内部广泛使用,目前amazon内部也慢慢将BI工具从tableau迁移到Superset.
在测试环境中,可以用docker部署,用docker-compose up一条命令即可部署成功,但在生产环境中,不建议使用此方法。
生产环境,可以参考下面的方法部署
系统要求
推荐内存4GB,硬盘20GB以上。 Superset 只支持python3.6以上版本,不支持python2.7 当前测试的superset版本为0.35.2 本次测试机型:AWS宁夏区Amazon Linux2 (ami-0e08e7c3821193844)
安装准备工具
先升级安装一下安装工具
安装一下python虚拟环境 sudo pip3 install virtualenv -i https://pypi.douban.com/simple
激活环境
升级一下pip和setuptools pip3 install --upgrade setuptools pip -i https://pypi.douban.com/simple
开始安装
使用pip3安装superset
测试环境部署,生产环境请跳过此步骤
在测试环境中,可以用下面的方法快速部署
在生产环境中使用gunicorn部署WSGI HTTP Server
在调试的时候,可以先不加 -D参数,等配置完成之后,再加-D将其放到后台
使用nginx 做前端转发
安装nginx并修改nginx配置文件,添加proxy_pass转发
在http-server80 --location处修改
登录到superset上
用户名和密码为先前 flask fab create-admin 这个命令创建的 http://nginx_ip/
安装mysql和aws athena连接driver
在superset网页界面的Sources--database中可以添加mysql,athena,bigquery等数据库。但默认情况下,并没有driver,需要手动安装。
先退出gunicorn启动的进程,然后使用pip来安装(venv环境中的pip)。具体安装的命令参考:https://superset.incubator.apache.org/installation.html#database-dependencies
以Athena示例: pip install PyAthena -i https://pypi.douban.com/simple
安装之后,默认只能连接global的Athena,无法连中国区,连宁夏区域Athena,要修改一下配置文件。在venv路径下:venv/lib/python3.7/site-packages/pyathena/,修改sqlalchemy_athena.py 这个文件,在第233行添加.cn后缀,即改为:'region_name': re.sub(r'^athena.([a-z0-9-]+).amazonaws.com.cn$', r'\1', url.host) 详情
重新启动gunicorn,并刷新一下Superset网页 gunicorn -w 10 --timeout 120 -b 0.0.0.0:6666 --limit-request-line 0 --limit-request-field_size 0 "superset.cli:create_app()"
添加一个DB,测试成功之后,网页弹窗显示:Seems OK! awsathena+rest://AWS_AK:AWS_SK@athena.cn-northwest-1.amazonaws.com.cn/default?s3_staging_dir=s3://xlaws/athena_temp/
添加MySQL示例:
这次把gunicorn放在后台(加上-D参数),同时启用access_log和error_log
添加mysql的数据源: mysql://DB_USERNAME:DB_PASSWORD@dbmysql.ckvg6d2mvjkp.rds.cn-northwest-1.amazonaws.com.cn
最后可以在Sources中添加table,然后可以根据自己的需要构建Charts和Dashboard。
关闭gunicorn进程
使用Redis做Cache,使用MySQL RDS做metastore
使用pip安装redis,这样Superset才能连到redis上 pip install redis -i https://pypi.douban.com/simple
在PYTHONPATH路径下,创建一个superset_config.py文件. 获取PYTHONPATH路径的方法: 进入python3 shell
在superset_config.py文件中,指定mysql和redis的地址端口以及用户名密码
之后要重新初始化数据库
重新启动gunicorn进程: gunicorn -w 10 --timeout 120 -b 0.0.0.0:6666 --limit-request-line 0 --limit-request-field_size 0 "superset.cli:create_app()" -D
创建database,table,chart,dashboard之后,登录到mysql和redis,可以看到已经有数据写入.
Superset高可用
创建另外一个superset,指定redis和mysql,然后前端挂载负载均衡器,测试当任意一台Superset宕机,另外一个superset都能正常提供服务,且之前创建的dashboard等信息依然保留。
故障排查
在使用Superset和AWS Athena集成的时候,遇到botocore版本冲突的报错,具体报错信息为: pkg_resources.ContextualVersionConflict: (botocore 1.15.26 (/home/ec2-user/venv/lib/python3.7/site-packages), Requirement.parse('botocore<1.16.0,>=1.15.27'), {'boto3'})
此时出问题的boto3和botocore版本为:
另外一台正常使用的boto3的版本为:
解决办法为: pip install boto3==1.12.26 --upgrade -i https://pypi.douban.com/simple
在AWS上使用CloudFromation部署SuperSet
链接:https://github.com/liualexiang/learninguide/blob/master/Superset/Superset_CloudFormation/Superset_on_EC2.template
在AWS上使用terraform部署superset
链接:https://github.com/liualexiang/learninguide/tree/master/Superset/Superset_on_EC2_Terraform
参考资料
https://superset.incubator.apache.org/installation.htm https://docs.gunicorn.org/en/stable/run.html#integration
最后更新于