hive数仓中数据的终点站-可视化报表和即席查询

时间:2024-11-15 11:50:09

可视化报表-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。