大数据技术-Apache Superset

目录

一、Superset概述

二、安装及使用

1、安装Python环境

2、安装Miniconda

3、创建Python3.8环境

4、Superset部署

5、启动Superset

6、Superset启停脚本

三、Superset使用

1、准备MySQL数据源

2、对接MySQL数据源

3、制作仪表盘

4、调整仪表盘的布局


一、Superset概述

Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。

Superset官网地址

二、安装及使用

部署环境:CentOS 7,MySQL数据库

1、安装Python环境

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操作可能会导致权限中断等。
所以后面需要新建用户来进行安装操作等。避免莫名其妙的错误。
网上有解决方案。推荐新建用户来解决。

2、安装Miniconda

        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

3、创建Python3.8环境

由于后续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

4、Superset部署

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

5、启动Superset

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

6、Superset启停脚本

启停脚本

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

三、Superset使用

1、准备MySQL数据源

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 ;

2、对接MySQL数据源

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官网数据源对接依赖安装说明

3、制作仪表盘

可以通过视图进行多表联查等实现。

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:指标

4、调整仪表盘的布局

1、进入仪表盘界面
右侧点击编辑
拖拽Row和Column把图标布局进行勾勒出来,再进行拖拽图标进行填充,可以拖拽图表大小,
可以配置标签页等信息,点击SAVE保存。

2、布局自动刷新功能配置
进入仪表盘界面-->右侧三个点-->Set suto-refresh interval-->进行修改多长时间刷新。

请记住,你当下的结果,由过去决定;你现在的努力,在未来见效;
不断学习才能不断提高!磨炼,不断磨炼自己的技能!学习伴随我们终生!
生如蝼蚁,当立鸿鹄之志,命比纸薄,应有不屈之心。
乾坤未定,你我皆是黑马,若乾坤已定,谁敢说我不能逆转乾坤?
努力吧,机会永远是留给那些有准备的人,否则,机会来了,没有实力,只能眼睁睁地看着机会溜走。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀神lwz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值