可视化报表-Superset
Apache Superset是一个开源的、现代的、轻量级BI分析工具,能够对接多种数据源、拥有丰富的图标展示形式、支持自定义仪表盘,且拥有友好的用户界面,十分易用。
1.0Superset安装方法
Superset是由Python语言编写的Web应用,要求Python3.6的环境。
1.1 安装Miniconda
conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。
此处,我们不需要如此多的工具包,只是用来管理不同版本的Python环境,故选择MiniConda。
1)下载Miniconda(Python3版本)
下载地址:/miniconda/Miniconda3-latest-Linux-x86_64.sh
2)安装Miniconda(需要连网)
(1)将Miniconda3-latest-Linux-x86_64.sh上传到/opt/module/路径
(2)执行以下命令进行安装,并按照提示操作,直到安装完成。
[user@hadoop102 module]$ bash Miniconda3-latest-Linux-x86_64.sh
- 1
(3)一直按回车键,直到出现Please answer ‘yes’ or ‘no’:’
Please answer 'yes' or 'no':'
>>> yes
- 1
- 2
(4)指定安装路径(根据用户需求指定):/opt/module/miniconda3
[/home/atguigu/miniconda3] >>> /opt/module/miniconda3
- 1
(5)是否初始化Miniconda3,输入yes
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> yes
- 1
- 2
- 3
(6)出现以下字样,即为安装完成
Thank you for installing Miniconda3!
- 1
3)加载环境变量配置文件,使之生效
(1)配置环境变量
[user@hadoop102 miniconda3]$ sudo vim /etc//my_env.sh
- 1
添加如下内容
export CONDA_HOME=/opt/module/miniconda3
export PATH=$PATH:$CONDA_HOME/bin
- 1
- 2
(2)source一下环境变量或者重启一下连接虚拟机的客户端
[user@hadoop102 miniconda3]$ source /etc//my_env.sh
- 1
4)取消激活base环境
Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。
[user@hadoop102 ~]$ conda config --set auto_activate_base false
- 1
1.2 创建Python3.6环境
1)配置conda国内镜像(清华)
[user@hadoop102 ~]$ conda config --add channels /anaconda/pkgs/free
[user@hadoop102 ~]$ conda config --add channels /anaconda/pkgs/main
[user@hadoop102 ~]$ conda config --set show_channel_urls yes
- 1
- 2
- 3
- 4
- 5
2)创建Python3.6环境
[user@hadoop102 ~]$ conda create --name superset python=3.6
- 1
说明:
conda环境管理常用命令
创建环境:conda create -n env_name
查看所有环境:conda info --envs
删除一个环境:conda remove -n env_name --all
3)激活superset环境
[user@hadoop102 ~]$ conda activate superset
- 1
激活后效果如下图所示
- 1
说明:退出当前环境
(superset) [user@hadoop102 ~]$ conda deactivate
- 1
1.3 安装Superset
1)安装Superset依赖
(superset) [user@hadoop102 ~]$ sudo yum install -y python-setuptools
(superset) [user@hadoop102 ~]$ sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
- 1
- 2
2)安装(更新)setuptools和pip(豆瓣)
(superset) [user@hadoop102 ~]$ pip install --upgrade setuptools pip -i /simple/
- 1
说明:pip是python的包管理工具,可以和centos中的yum类比
3)安装Supetset
(superset) [user@hadoop102 ~]$ pip install apache-superset -i /simple/
- 1
说明:-i的作用是指定镜像,这里选择国内镜像(豆瓣)
4)初始化Supetset数据库(Supetset是一个web应用,自带数据库,需要初始化)
(superset) [user@hadoop102 ~]$ superset db upgrade
- 1
5)创建管理员用户
(superset) [user@hadoop102 ~]$ export FLASK_APP=superset
(superset) [user@hadoop102 ~]$ flask fab create-admin
Username [admin]: user
User first name [admin]: user
User last name [user]: user
Email [admin@]:
Password: 123456
Repeat for confirmation: 123456
说明:flask是一个python web框架,Superset使用的就是flask
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
6)Superset初始化
(superset) [user@hadoop102 ~]$ superset init
- 1
1.4 启动Supterset
1)安装gunicorn
(superset) [user@hadoop102 ~]$ pip install gunicorn -i /simple/
- 1
说明:gunicorn是一个Python Web Server,可以和java中的TomCat类比
2)启动Superset
第一步:确保当前conda环境为superset,及下图所示
(superset) [user@hadoop102 ~]$
- 1
第二步:启动
(superset) [user@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 ":create_app()" --daemon
- 1
说明:
workers:指定进程个数
timeout:worker进程超时时间,超时会自动重启
bind:绑定本机地址,即为Superset访问地址
daemon:后台运行
3)停止superset
(1)停掉gunicorn进程
(superset) [user@hadoop102 ~]$ ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
- 1
(2)退出superset环境
(superset) [user@hadoop102 ~]$ conda deactivate
- 1
4)登录Superset
访问http://hadoop102:8787,并使用1.3节中第5步创建的管理员账号进行登录。
例如:用户名:user 密码:123456
1.5 对接MySQL数据源
1.5.1 安装依赖
1)安装连接MySQL数据源的依赖
(superset) [user@hadoop102 ~]$ conda install mysqlclient
Proceed ([y]/n)? y
- 1
- 2
说明:对接不同的数据源,需安装不同的依赖,以下地址为官网说明
/docs/databases/installing-database-drivers
2)重启Superset
(superset) [user@hadoop102 ~]$ restart
- 1
之后可按照页面的推荐进行表格个仪表盘的设计和展示:
即席查询Presto
1.0 Presto优缺点
1.1 Presto的安装
0)官网地址
/
1)下载地址
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.
2)将presto-server-0.导入hadoop102的/opt/software目录下,并解压到/opt/module目录
[user@hadoop102 software]$ tar -zxvf presto-server-0. -C /opt/module/
- 1
3)修改名称为presto
[user@hadoop102 module]$ mv presto-server-0.196/ presto
- 1
4)进入到/opt/module/presto目录,并创建存储数据文件夹
[user@hadoop102 presto]$ mkdir data
- 1
5)进入到/opt/module/presto目录,并创建存储配置文件文件夹
[user@hadoop102 presto]$ mkdir etc
- 1
6)配置在/opt/module/presto/etc目录下添加配置文件
[user@hadoop102 etc]$ vim
- 1
添加如下内容
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
7)Presto可以支持多个数据源,在Presto里面叫catalog,这里我们配置支持Hive的数据源,配置一个Hive的catalog
[user@hadoop102 etc]$ mkdir catalog
[user@hadoop102 catalog]$ vim
- 1
- 2
添加如下内容
=hive-hadoop2
=thrift://hadoop102:9083
- 1
- 2
8)将hadoop102上的presto分发到hadoop103、hadoop104
[user@hadoop102 module]$ xsync presto
- 1
9)分发之后,分别进入hadoop102、hadoop103、hadoop104三台主机的/opt/module/presto/etc的路径。配置node属性,node id每个节点都不一样。
[user@hadoop102 etc]$vim
=production
=ffffffff-ffff-ffff-ffff-ffffffffffff
-dir=/opt/module/presto/data
[user@hadoop103 etc]$vim
=production
=ffffffff-ffff-ffff-ffff-fffffffffffe
-dir=/opt/module/presto/data
[user@hadoop104 etc]$vim
=production
=ffffffff-ffff-ffff-ffff-fffffffffffd
-dir=/opt/module/presto/data
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
10)Presto是由一个coordinator节点和多个worker节点组成。在hadoop102上配置成coordinator,在hadoop103、hadoop104上配置为worker。
(1)hadoop102上配置coordinator节点
[user@hadoop102 etc]$ vim
- 1
添加内容如下
coordinator=true
-coordinator=false
=8881
-memory=50GB
=true
=http://hadoop102:8881
- 1
- 2
- 3
- 4
- 5
- 6
(2)hadoop103、hadoop104上配置worker节点
[user@hadoop103 etc]$ vim
- 1
添加内容如下
coordinator=false
=8881
-memory=50GB
=http://hadoop102:8881
- 1
- 2
- 3
- 4
[user@hadoop104 etc]$ vim
- 1
添加内容如下
coordinator=false
=8881
-memory=50GB
=http://hadoop102:8881
- 1
- 2
- 3
- 4
11)在hadoop102的/opt/module/hive目录下,启动Hive Metastore,用user角色
[user@hadoop102 hive]$
nohup bin/hive --service metastore >/dev/null 2>&1 &
- 1
- 2
12)分别在hadoop102、hadoop103、hadoop104上启动Presto Server
(1)前台启动Presto,控制台显示日志
[user@hadoop102 presto]$ bin/launcher run
[user@hadoop103 presto]$ bin/launcher run
[user@hadoop104 presto]$ bin/launcher run
- 1
- 2
- 3
(2)后台启动Presto
[user@hadoop102 presto]$ bin/launcher start
[user@hadoop103 presto]$ bin/launcher start
[user@hadoop104 presto]$ bin/launcher start
- 1
- 2
- 3
13)日志查看路径/opt/module/presto/data/var/log
1.3 Presto的连接和使用
推荐使用DBeaver
驱动设置:
之后就连接到hive,输入指令可查看Schemas
输入sql即可进行查询:
1.4 Presto的优势应用
Presto能够完成不能框架下的数据查询,例如进行mysql和hive的查询:
即席查询 Kylin
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
1.0 Kylin的特点
Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。
1)标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。
2)支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。
3)亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
4)可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。
5)BI工具集成
Kylin可以与现有的BI工具集成,具体包括如下内容。
ODBC:与Tableau、Excel、PowerBI等工具集成
JDBC:与Saiku、BIRT等Java工具集成
RestAPI:与JavaScript、Web网页集成
Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。
1.1 Kylin安装
1)上传Kylin安装包apache-kylin-3.0.
2)解压apache-kylin-3.0.到/opt/module
[user@hadoop102 sorfware]$ tar -zxvf apache-kylin-3.0. -C /opt/module/
[user@hadoop102 module]$ mv /opt/module/apache-kylin-3.0.2-bin /opt/module/kylin
- 1
- 2
- 3
3)Kylin兼容性问题
修改/opt/module/kylin/bin/,排除冲突的jar包
需要增加的内容:! -name ‘jackson’ ! -name ‘metastore’
注意前后保留空格
4)Kylin启动
(1)启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
(2)启动Kylin
[user@hadoop102 kylin]$ bin/ start
- 1
在http://hadoop102:7070/kylin查看Web页面
用户名为:ADMIN,密码为:KYLIN
5)关闭Kylin
[user@hadoop102 kylin]$ bin/ stop
- 1
1.2 Kylin的使用
Kylin的使用可分为 创建工程-获取数据源-创建model-创建cube 4步组成
1)创建工程
点击下图中的"+"。
填写项目名称和描述信息,并点击Submit按钮提交。
2)获取数据源
点击DataSource
点击下图按钮导入Hive表
选择所需数据表,并点击Sync按钮
3)创建model
点击Models,点击"+New"按钮,点击"★New Model"按钮。
填写Model信息,点击Next
指定事实表
选择维度表,并指定事实表和维度表的关联条件,点击Ok
指定维度字段,并点击Next
指定度量字段,并点击Next
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
4)构建cube
点击new, 并点击new cube
填写cube信息,选择cube所依赖的model,并点击next
选择所需的维度,如下图所示
选择所需度量值,如下图所示
cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期。
Kylin高级配置(优化相关,暂时跳过)
Kylin相关属性配置覆盖
Cube信息总览,点击Save,Cube创建完成
构建Cube(计算),点击对应Cube的action按钮,选择build
选择要构建的时间区间,点击Submit
点击Monitor查看构建进度
1.3 构建错误
1)每日全量维度表及拉链维度表重复Key问题如何处理
按照上述流程,会发现,在cube构建流程中出现以下错误
错误原因分析:
上述错误原因是model中的维度表dwd_dim_user_info_his为拉链表、dwd_dim_sku_info为每日全量表,故使用整张表作为维度表,必然会出现订单表中同一个user_id或者sku_id对应多条数据的问题,针对上述问题,有以下两种解决方案。
方案一:在hive中创建维度表的临时表,该临时表中只存放维度表最新的一份完整的数据,在kylin中创建模型时选择该临时表作为维度表。
方案二:与方案一思路相同,但不使用物理临时表,而选用视图(view)实现相同的功能。
此处采用方案二:
(1)创建维度表视图
–拉链维度表视图
create view dwd_dim_user_info_his_view as select * from dwd_dim_user_info_his where end_date=‘9999-99-99’;
–全量维度表视图
create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt=date_add(current_date,-1);
–当前情形我们先创建一个2020-06-14的视图
create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt=‘2020-06-14’;
(2)在DataSource中导入新创建的视图,之前的维度表,可选择性删除。
(3)重新创建model、cube。