Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。
Superset官网地址
部署环境:CentOS 7,MySQL数据库
Superset是由Python语言编写的Web应用,要求Python3.7的环境。但后面安装Superset环境:初始化Superset数据库 superset db upgrade操作有环境问题。故:此时需要,创建Python3.8环境。
Linux自带Python环境:不要直接升级Linux自带Python或删除,怕影响系统自带一些组件的运行
#查看Python版本
[root@localhost ~]# python -V
Python 2.7.5
此时,要求系统支持多个Python版本。互不影响使用。此时应该怎么办?安装conda环境
直接用Linux的root账号进行安装的话报如下黄色警告:
WARNING: Running pip as the 'root' user can result in broken permissions and
conflicting behaviour with the system package manager. It is recommended to
use a virtual environment instead: https://pip.pypa.io/warnings/venv
直接用root执行pip操作可能会导致权限中断等。
所以后面需要新建用户来进行安装操作等。避免莫名其妙的错误。
网上有解决方案。推荐新建用户来解决。
conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。
此处,我们不需要如此多的工具包,故选择Miniconda。
1、下载Miniconda(Python3版本)
下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
2、安装Miniconda
2.1把下载的Miniconda安装包上传至Linux中自定义目录中
2.2、执行以下命令进行安装,并按照提示操作,知道安装完成。
[admin@localhost superset]# bash Miniconda3-latest-Linux-x86_64.sh
2.3、安装过程中出现以下提示,可以指定安装路径。
Miniconda3 will now be installed into this location:
...
...>>>/opt/module/miniconda3
指定安装路径[/opt/module/miniconda3],然后回车
yes
2.4、出现以下字样,即为安装完成。
Thank you for installing Miniconda3!
3、加载环境变量配置文件,使之生效
source ~/.bashrc
4、新打开窗口进行取消激活base环境
Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可以通过以下命令
取消激活base环境:
conda config --set auto_activate_base false
由于后续Superset部署初始化Superset数据库 superset db upgrade操作有环境问题
故:此时需要,创建Python3.8环境
1、配置conda国内镜像
(base) [admin@localhost superset]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
-----------------------------------------------------------------
(base) [admin@localhost superset]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
2、创建Python3.8环境
(base) [admin@localhost superset]$ conda create --name superset python=3.8
说明:conda:环境管理常用命令
3、创建环境
conda create -n env_name python=3.8
4、查看所有环境
conda info --envs
5、删除一个环境
conda remove -n env_name --all
6、激活superset环境
conda activate superset
查看Python版本
python -V
7、退出当前环境
conda deactivate
Superset部署环境在激活superset环境中进行操作。
1、安装依赖
安装Superset之前,需要安装以下所需依赖
(superset) [admin@localhost superset]#
sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel python-setuptools openssl-devel cyrus-sasl-devel openldap-devel
2、安装Superset
2.1、安装(更新)setuptools和pip
(superset) [admin@localhost superset]#
pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/
说明:pip是python的包管理工具,可以和centos中的yum类比
2.2、安装superset
(superset) [root@localhost superset]#
pip install apache-superset -i https://pypi.douban.com/simple/
说明:-i的作用是执行镜像,这里选择国内镜像
注:如果遇到网络错误导致不能下载,可尝试更换镜像。
(superset) [admin@localhost superset]#
pip install --upgrade setuptools pip --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
----------------------------------------------------
(superset) [admin@localhost superset]#
pip install apache-superset --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
3、初始化Superset数据库----如果python=3.7会报错。
(superset) [admin@localhost superset]# superset db upgrade
--->报错
错误1:ImportError: cannot import name ‘soft_unicode’ from 'markupsafe’
解决方式:
执行命令:
1、查看markupsafe信息
(superset) [admin@localhost superset]# pip show markupsafe
2、把markupsafe版本回退覆盖为2.0.1
(superset) [admin@localhost superset]# python -m pip install markupsafe==2.0.1
错误2:ImportError: cannot import name ‘TypedDict’ from ‘typing’
解决方式:把python=3.7环境换为3.8把上面创建环境删除重新创建就不出现此错误
4、创建管理员用户
(superset) [admin@localhost superset]# export FLASK_APP=superset
(superset) [admin@localhost superset]# superset fab create-admin
-->输入用户名
-->密码等
说明:flask是一个python web框架,Superset使用的就是flask
5、Superset初始化
superset init
1、安装gunicorn
(superset) [admin@localhost superset]# pip install gunicorn -i https://pypi.douban.com/simple/
说明:gunicorn是一个Python Web Server,可以和java中的Tomcat类比
2、启动Superset
2.1、确保当前conda环境为superset
2.2、启动
(superset) [admin@localhost superset]# gunicorn --workers 5 --timeout 120 --bind 192.168.30.120:8787 "superset.app:create_app()" --daemon
说明:
--workers:指定进程个数
--timeout:worker进程超时时间,超时会自动重启
--bind:绑定本机地址,即为Superset访问地址
--daemon:后台运行
3、登录Superset
访问http://192.168.30.120:8787
并使用之前我们自己创建的管理员账户进行登录。
--此处访问如果在其他机器访问的话如果怎么都访问不上的话,那最大可能是Linux防火墙没关。导致访问超时拒绝。
--关闭了linux的防火墙,才能在外面访问到对应的服务
1.查看防火墙状态
(superset) [admin@localhost superset]# service firewalld status
2.关闭防火墙
(superset) [admin@localhost superset]# service firewalld stop
4、停止gunicorn进程
(superset) [admin@localhost superset]# ps -ef | awk '/superset/ && !/awk/{print $2}' | xargs kill -9
5、退出Superset环境
(superset) [admin@localhost superset]# conda deactivate
启停脚本
1、创建superset.sh文件,拷贝到/bin目录
内容如下:--[修改IP]进行修正
#!/bin/bash
superset_status(){
result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l`
if [[ $result -eq 0 ]]; then
return 0
else
return 1
fi
}
superset_start(){
source ~/.bashrc
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
conda activate superset ; gunicorn --workers 5 --timeout 1200 --bind [修改IP]:8787 --daemon 'superset.app:create_app()'
else
echo "superset正在运行"
fi
}
superset_stop(){
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "superset未在运行"
else
ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
fi
}
case $1 in
start )
echo "启动Superset"
superset_start
;;
stop )
echo "停止Superset"
superset_stop
;;
restart )
echo "重启Superset"
superset_stop
superset_start
;;
status )
superset_status >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "superset未在运行"
else
echo "superset正在运行"
fi
esac
报错解决
运行superset.sh status报如下错误:
bash: /usr/bin/superset.sh: /bin/bash^M: bad interpreter: No such file or directory
把一段脚本代码拷贝到centos/ubuntu后,运行出现了/bin/bash^M : bad interpreter : No such file or Directory,解决方法如下:
将脚本通过vi或vim打开,按ESC进入命令模式。输入:set fileformat=unix。(注意要带冒号,是在编辑器最底部输入才对)。之后输入:wq保存即可。
重新运行,正常。
---------
上面还是解决不了的话,建议直接使用 vim superset.sh方式创建文件
赋予权限
1、赋予权限
(base) [admin@localhost bin]$ chmod +777 superset.sh
2、查看状态
(base) [admin@localhost bin]$ superset.sh status
superset正在运行
3、启动
superset.sh start
4、停止
superset.sh stop
5、重启
superset.sh restart
1、创建MySQL数据库
字符集:utf8 排序规则:utf8_general_ci
2、创建表 sql示例数据
-- 学生表
DROP TABLE IF EXISTS `student`;
create table student
(
s_no varchar(10) not null COMMENT '学号',
s_name varchar(10) COMMENT '姓名',
s_sex varchar(2) COMMENT '性别',
borndate timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '出生日期',
ClassName varchar(50) COMMENT '班级名称',
Telephone varchar(11) COMMENT '电话号码',
EnrollDate timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册日期',
Address varchar(50) COMMENT '地址',
Comment text COMMENT '备注'
);
-- 教师表
DROP TABLE IF EXISTS `teacher`;
create table teacher
(
t_no varchar(10) not null COMMENT '教师号',
t_name varchar(10) COMMENT '姓名',
t_sex varchar(2) COMMENT '性别',
BornDate timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '出生日期',
Dept_No varchar(10) COMMENT '部门编号'
);
-- 课程表
DROP TABLE IF EXISTS `Course`;
create table Course
(
c_No varchar(10) not null COMMENT '课程号',
c_Name varchar(30) COMMENT '课程名',
c_Type varchar(10) COMMENT '课程类型',
c_Credit Decimal(5,1) COMMENT '课程学分',
c_Des text COMMENT '课程描述'
);
-- 授课表
DROP TABLE IF EXISTS `t_c`;
create table t_c
(
t_no char(10) not null COMMENT '教师号',
c_no char(10) not null COMMENT '课程号',
Semester varchar(30) COMMENT '学期'
);
-- 成绩表
DROP TABLE IF EXISTS `s_c`;
create table s_c
(
s_no char(10) not null COMMENT '学号',
c_no char(10) not null COMMENT '课程号',
score int COMMENT '成绩'
);
-- 部门表
DROP TABLE IF EXISTS `Dept`;
create table Dept
(
d_no varchar(10) not null COMMENT '部门号',
DeptName varchar(20) COMMENT '部门名称',
Duty varchar(50) COMMENT '部门职责'
);
-- 插入数据
-- 向student表中插入数据
insert into student values('05331101','张曼','女','1993-05-03 00:00:00',
'计算机应用','18602354822','2005-09-01 00:00:00','辽宁沈阳',null);
insert into student values('05331102','刘迪','女','1994-10-20 00:00:00',
'计算机应用','13893220935','2005-09-01 00:00:00','辽宁抚顺',null);
insert into student values('05331103','刘凯','男','1982-05-30 00:00:00',
'计算机应用','18641330245','2005-09-01 00:00:00','辽宁鞍山',null);
insert into student values('05331104','王越','男','1991-09-19 00:00:00',
'计算机应用','18641320940','2005-09-01 00:00:00','辽宁营口',null);
insert into student values('05331105','李楠','女','1995-03-16 00:00:00',
'计算机应用','18641328449','2005-09-01 00:00:00','辽宁锦州',null);
insert into student values('05331106','胡栋','男','1992-07-03 00:00:00',
'计算机应用','18641326996','2005-09-01 00:00:00','辽宁沈阳',null);
insert into student values('06102534','杨超','男','1990-10-01 00:00:00',
'机械设计','13893245623','2006-09-01 00:00:00','河北石家庄',null);
-- 向教师表中插入数据
insert into teacher values('0001','王庆','男','1971-03-09 00:00:00','1');
insert into teacher values('0002','林志玲','女','1980-07-12 00:00:00','2');
insert into teacher values('0003','黎明','男','1975-05-18 00:00:00','3');
insert into teacher values('0004','郭靖','男','1979-10-29 00:00:00','4');
insert into teacher values('0005','黄蓉','女','1973-08-27 00:00:00','1');
insert into teacher values('0006','林黛玉','女','1983-5-27 00:00:00','2');
insert into teacher values('0007','张无忌','男','1992-5-27 00:00:00','2');
insert into teacher values('0008','张翠山','男','1994-5-27 00:00:00','3');
insert into teacher values('0009','张三丰','男','1991-5-27 00:00:00','4');
insert into teacher values('0010','牛郎','男','1988-5-27 00:00:00','5');
insert into teacher values('0011','王莽','男','1989-5-27 00:00:00','6');
insert into teacher values('0012','郑宇','女','1986-5-27 00:00:00','7');
insert into teacher values('0013','王欣然','女','1988-5-27 00:00:00','7');
insert into teacher values('0014','王倩倩','女','1989-5-27 00:00:00','4');
insert into teacher values('0015','刘邦','男','1980-5-27 00:00:00','5');
insert into teacher values('0016','宋江','男','1981-5-27 00:00:00','4');
insert into teacher values('0017','武松','男','1982-5-27 00:00:00','3');
insert into teacher values('0018','林江','男','1984-5-27 00:00:00','1');
insert into teacher values('0019','王宇','女','1985-5-27 00:00:00','1');
insert into teacher values('0020','王捷','女','1986-5-27 00:00:00','2');
insert into teacher values('0021','王丽丽','女','1988-5-27 00:00:00','3');
-- 向成绩表中录入数据
insert into s_c values('05331101','0001',95);
insert into s_c values('05331101','0002',98);
insert into s_c values('05331101','0003',89);
insert into s_c values('05331102','0001',93);
insert into s_c values('05331102','0002',99);
insert into s_c values('05331102','0003',95);
insert into s_c values('05331103','0001',84);
insert into s_c values('05331103','0002',80);
insert into s_c values('05331103','0003',94);
insert into s_c values('05331104','0001',70);
insert into s_c values('05331104','0002',80);
insert into s_c values('05331104','0003',94);
insert into s_c values('05331105','0001',60);
insert into s_c values('05331105','0002',80);
insert into s_c values('05331105','0003',94);
insert into s_c values('05331106','0001',30);
insert into s_c values('05331106','0002',80);
insert into s_c values('05331106','0003',94);
insert into s_c values('06102534','0001',54);
insert into s_c values('06102534','0002',40);
insert into s_c values('06102534','0003',29);
-- 向部门表中插入数据
insert into Dept values('1','人事处','处理人事工作');
insert into Dept values('2','学生处','处理学生工作');
insert into Dept values('3','教务处','处理教学相关工作');
insert into Dept values('4','校园管理处','处理学校所有后勤辅助工作');
insert into Dept values('5','机械与运载学院','教学单位');
insert into Dept values('6','信息与控制学院','教学单位');
insert into Dept values('7','经济与管理学院','教学单位');
-- 向课程表中插入数据
insert into Course values('0001','大学英语','考试','10','英语相关知识');
insert into Course values('0002','数据库原理及应用','考试','7','数据库相关知识');
insert into Course values('0003','数据结构','考查','5','程序设计基础');
-- 向授课表中插入数据
insert into t_c values('0001','0001','2011-2012(1)');
insert into t_c values('0001','0002','2011-2012(2)');
insert into t_c values('0002','0001','2011-2012(1)');
insert into t_c values('0003','0001','2011-2012(1)');
insert into t_c values('0004','0002','2011-2012(2)');
insert into t_c values('0005','0002','2011-2012(2)');
insert into t_c values('0006','0003','2011-2012(2)');
insert into t_c values('0006','0002','2011-2012(1)');
-- 创建教师部门视图
CREATE VIEW teacher_dept_view AS
select t.*,d.* from teacher t,Dept d where t.Dept_No=d.d_no;
-- 创建学生成绩视图
CREATE VIEW student_grade_view AS
select s.*,sc.score,c.c_Name from student s,s_c sc,Course c where s.s_no=sc.s_no and sc.c_no=c.c_No ;
1、安装依赖
(superset) [admin@localhost superset]# conda install mysqlclient
说明:对接不同的数据库,需要安装不同的依赖,以下地址为官网说明
https://superset.apache.org/docs/databases/installing-database-drivers
2、重启Superset
superset.sh restart
3、数据源配置
进到Superset网页中
1.Database配置
Step1:点击Data/Databases<--对应-->数据库
Step1:点击Data/Datasets<--对应-->表
Step1:点击Data/Upload a CSV<--对应-->CSV上传CSV文件直接使用分析展示文件中数据
2.右上角+DATABASE点击新建
DISPLAY NAME :数据库名称
SQLALCHEMY URI:mysql://用户名:密码@主机名:3306/数据库名称?charset=utf8
点击TEST CONNECTION 右下角显示Connection looks good!代表链接成功。
4、配置表
进到Superset网页中
1.Datasets配置
Step1:点击Data/Datasets<--对应-->表
2.右上角+DATASET点击新建
DATASOURCE :上面数据源配置中的数据库连接
SCHEMA:数据库中dababase
TABLE:表
点击下方的ADD进行添加
---多加几张表
Superset官网数据源对接依赖安装说明
可以通过视图进行多表联查等实现。
1、创建空白仪表盘
进到Superset网页中
点击Dashboards/+DASHBOARDS
重新命名DASHBOARDS---右侧点击SAVE保存
2、绘制仪表盘--折线图
点击Charts-->点击右上角+CHART
Choose a dataset:对应表
Choose a visualization type:选择一个可视化的类型
Table:可视化的类型/折线图/柱状图/地图等--此处选择折线图
CREATE NEW CHART创建
-->进入配置界面
左侧:是表的字段信息
中间:核心配置区域
右侧:配置完后的图表的预览区域
-->中间:核心配置区域
DATA
Time
TIME COLUMN:指明时间字段
TIME GRAIN:时间粒度:多久一个点:横轴
TIME RANGE:时间范围:要展示的时间范围--No filter不过滤
Query
METRICS:指标:指折线图的纵轴--SIMPLE-->COLIMN选择一个字段,选择一个聚合函数,
可以在左上角给指标起一个别名,点击SAVE保存
FILTER:过滤条件
GROUP BY:
-->右侧:配置完后的图表的预览区域
可以起一个别名
点击中间SAVE保存。-->ADD TO DASHBOARD:添加到DASHBOARD中,点击SAVE保存
回到最外面DASHBOARD中可以查看我们制作的图表
3、绘制仪表盘--地图
点击Charts-->点击右上角+CHART
Choose a dataset:对应表
Choose a visualization type:选择一个可视化的类型
Table:可视化的类型/折线图/柱状图/地图等--此处选择地图(Country Map)
CREATE NEW CHART创建
同上2
Query
COUNTRY:选择国家:China
ISO 3166-2 CODES:编码标准编号:可对应表中一个字段
METRICS:指标:地图的数量--SIMPLE-->COLIMN选择一个字段,选择一个聚合函数,
可以在左上角给指标起一个别名,点击SAVE保存
同上2
4、绘制仪表盘--柱状图
点击Charts-->点击右上角+CHART
Choose a dataset:对应表
Choose a visualization type:选择一个可视化的类型
Table:可视化的类型/折线图/柱状图/地图等--此处选择柱状图(Bar Chart)
CREATE NEW CHART创建
同上2,3
Query
METRICS:指标:指柱状图的纵轴
SERIES:柱状图的分组字段:横轴:同METRICS
同上2,3
5、绘制仪表盘--饼状图
点击Charts-->点击右上角+CHART
Choose a dataset:对应表
Choose a visualization type:选择一个可视化的类型
Table:可视化的类型/折线图/柱状图/地图等--此处选择饼状图(Pie Chart)
CREATE NEW CHART创建
同上2,3
Query
GROUP BY:分组分类字段
METRICS:指标
1、进入仪表盘界面
右侧点击编辑
拖拽Row和Column把图标布局进行勾勒出来,再进行拖拽图标进行填充,可以拖拽图表大小,
可以配置标签页等信息,点击SAVE保存。
2、布局自动刷新功能配置
进入仪表盘界面-->右侧三个点-->Set suto-refresh interval-->进行修改多长时间刷新。