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

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

hive数仓中数据的终点站-可视化报表和即席查询_第1张图片

1)下载Miniconda(Python3版本)

下载地址:https://repo.anaconda.com/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

(3)一直按回车键,直到出现Please answer ‘yes’ or ‘no’:’

Please answer 'yes' or 'no':'
>>> yes

(4)指定安装路径(根据用户需求指定):/opt/module/miniconda3

[/home/atguigu/miniconda3] >>> /opt/module/miniconda3

(5)是否初始化Miniconda3,输入yes

Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> yes

(6)出现以下字样,即为安装完成

Thank you for installing Miniconda3!

3)加载环境变量配置文件,使之生效

(1)配置环境变量

[user@hadoop102 miniconda3]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容

export CONDA_HOME=/opt/module/miniconda3
export PATH=$PATH:$CONDA_HOME/bin

(2)source一下环境变量或者重启一下连接虚拟机的客户端

[user@hadoop102 miniconda3]$ source /etc/profile.d/my_env.sh

4)取消激活base环境

Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。

[user@hadoop102 ~]$ conda config --set auto_activate_base false

1.2 创建Python3.6环境

1)配置conda国内镜像(清华)

[user@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free

[user@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

[user@hadoop102 ~]$ conda config --set show_channel_urls yes

2)创建Python3.6环境

[user@hadoop102 ~]$ conda create --name superset python=3.6

说明:
 conda环境管理常用命令
 创建环境:conda create -n env_name
 查看所有环境:conda info --envs
 删除一个环境:conda remove -n env_name --all

3)激活superset环境

[user@hadoop102 ~]$ conda activate superset
激活后效果如下图所示

说明:退出当前环境

(superset) [user@hadoop102 ~]$ conda deactivate

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

2)安装(更新)setuptools和pip(豆瓣)

(superset) [user@hadoop102 ~]$ pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/

说明:pip是python的包管理工具,可以和centos中的yum类比

3)安装Supetset

(superset) [user@hadoop102 ~]$ pip install apache-superset -i https://pypi.douban.com/simple/

说明:-i的作用是指定镜像,这里选择国内镜像(豆瓣)

4)初始化Supetset数据库(Supetset是一个web应用,自带数据库,需要初始化)

(superset) [user@hadoop102 ~]$ superset db upgrade

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 [[email protected]]:
Password: 123456
Repeat for confirmation: 123456
说明:flask是一个python web框架,Superset使用的就是flask

6)Superset初始化

(superset) [user@hadoop102 ~]$ superset init

1.4 启动Supterset

1)安装gunicorn

(superset) [user@hadoop102 ~]$  pip install gunicorn -i https://pypi.douban.com/simple/

说明:gunicorn是一个Python Web Server,可以和java中的TomCat类比

2)启动Superset
第一步:确保当前conda环境为superset,及下图所示

(superset) [user@hadoop102 ~]$

第二步:启动

(superset) [user@hadoop102 ~]$  gunicorn --workers 5 --timeout 120 --bind hadoop102:8787  "superset.app:create_app()" --daemon 

说明:
 workers:指定进程个数
 timeout:worker进程超时时间,超时会自动重启
 bind:绑定本机地址,即为Superset访问地址
 daemon:后台运行
3)停止superset
(1)停掉gunicorn进程

(superset) [user@hadoop102 ~]$ ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9

(2)退出superset环境

(superset) [user@hadoop102 ~]$  conda deactivate

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

说明:对接不同的数据源,需安装不同的依赖,以下地址为官网说明
https://superset.apache.org/docs/databases/installing-database-drivers

2)重启Superset

(superset) [user@hadoop102 ~]$ superset.sh restart

之后可按照页面的推荐进行表格个仪表盘的设计和展示:
hive数仓中数据的终点站-可视化报表和即席查询_第2张图片

即席查询Presto

1.0 Presto优缺点

hive数仓中数据的终点站-可视化报表和即席查询_第3张图片

1.1 Presto的安装

0)官网地址

https://prestodb.github.io/

1)下载地址

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.196.tar.gz

2)将presto-server-0.196.tar.gz导入hadoop102的/opt/software目录下,并解压到/opt/module目录

[user@hadoop102 software]$ tar -zxvf presto-server-0.196.tar.gz -C /opt/module/

3)修改名称为presto

[user@hadoop102 module]$ mv presto-server-0.196/ presto

4)进入到/opt/module/presto目录,并创建存储数据文件夹

[user@hadoop102 presto]$ mkdir data

5)进入到/opt/module/presto目录,并创建存储配置文件文件夹

[user@hadoop102 presto]$ mkdir etc

6)配置在/opt/module/presto/etc目录下添加jvm.config配置文件

[user@hadoop102 etc]$ vim jvm.config

添加如下内容

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

7)Presto可以支持多个数据源,在Presto里面叫catalog,这里我们配置支持Hive的数据源,配置一个Hive的catalog

[user@hadoop102 etc]$ mkdir catalog
[user@hadoop102 catalog]$ vim hive.properties 

添加如下内容

connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadoop102:9083

8)将hadoop102上的presto分发到hadoop103、hadoop104

[user@hadoop102 module]$ xsync presto

9)分发之后,分别进入hadoop102、hadoop103、hadoop104三台主机的/opt/module/presto/etc的路径。配置node属性,node id每个节点都不一样。

[user@hadoop102 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data

[user@hadoop103 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/module/presto/data

[user@hadoop104 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/module/presto/data

10)Presto是由一个coordinator节点和多个worker节点组成。在hadoop102上配置成coordinator,在hadoop103、hadoop104上配置为worker。

(1)hadoop102上配置coordinator节点

[user@hadoop102 etc]$ vim config.properties

添加内容如下

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://hadoop102:8881

(2)hadoop103、hadoop104上配置worker节点

[user@hadoop103 etc]$ vim config.properties

添加内容如下

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881
[user@hadoop104 etc]$ vim config.properties

添加内容如下

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881

11)在hadoop102的/opt/module/hive目录下,启动Hive Metastore,用user角色

[user@hadoop102 hive]$
nohup bin/hive --service metastore >/dev/null 2>&1 &

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

(2)后台启动Presto

[user@hadoop102 presto]$ bin/launcher start
[user@hadoop103 presto]$ bin/launcher start
[user@hadoop104 presto]$ bin/launcher start

13)日志查看路径/opt/module/presto/data/var/log

1.3 Presto的连接和使用

推荐使用DBeaverhive数仓中数据的终点站-可视化报表和即席查询_第4张图片

驱动设置:
hive数仓中数据的终点站-可视化报表和即席查询_第5张图片
之后就连接到hive,输入指令可查看Schemas
hive数仓中数据的终点站-可视化报表和即席查询_第6张图片
输入sql即可进行查询:
hive数仓中数据的终点站-可视化报表和即席查询_第7张图片

1.4 Presto的优势应用

Presto能够完成不能框架下的数据查询,例如进行mysql和hive的查询:
hive数仓中数据的终点站-可视化报表和即席查询_第8张图片

即席查询 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-bin.tar.gz

2)解压apache-kylin-3.0.2-bin.tar.gz到/opt/module

[user@hadoop102 sorfware]$ tar -zxvf apache-kylin-3.0.2-bin.tar.gz -C /opt/module/

[user@hadoop102 module]$ mv /opt/module/apache-kylin-3.0.2-bin /opt/module/kylin

3)Kylin兼容性问题
修改/opt/module/kylin/bin/find-spark-dependency.sh,排除冲突的jar包
需要增加的内容:! -name ‘jackson’ ! -name ‘metastore
注意前后保留空格

在这里插入图片描述
4)Kylin启动

(1)启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase

(2)启动Kylin

[user@hadoop102 kylin]$ bin/kylin.sh start

在http://hadoop102:7070/kylin查看Web页面
hive数仓中数据的终点站-可视化报表和即席查询_第9张图片
用户名为:ADMIN,密码为:KYLIN

5)关闭Kylin

[user@hadoop102 kylin]$ bin/kylin.sh stop

1.2 Kylin的使用

Kylin的使用可分为 创建工程-获取数据源-创建model-创建cube 4步组成

1)创建工程

点击下图中的"+"。
hive数仓中数据的终点站-可视化报表和即席查询_第10张图片
填写项目名称和描述信息,并点击Submit按钮提交。
hive数仓中数据的终点站-可视化报表和即席查询_第11张图片

2)获取数据源

点击DataSource
hive数仓中数据的终点站-可视化报表和即席查询_第12张图片
点击下图按钮导入Hive表
hive数仓中数据的终点站-可视化报表和即席查询_第13张图片
选择所需数据表,并点击Sync按钮
hive数仓中数据的终点站-可视化报表和即席查询_第14张图片

3)创建model

点击Models,点击"+New"按钮,点击"★New Model"按钮。
hive数仓中数据的终点站-可视化报表和即席查询_第15张图片
填写Model信息,点击Next
hive数仓中数据的终点站-可视化报表和即席查询_第16张图片
指定事实表
hive数仓中数据的终点站-可视化报表和即席查询_第17张图片
选择维度表,并指定事实表和维度表的关联条件,点击Ok

hive数仓中数据的终点站-可视化报表和即席查询_第18张图片
指定维度字段,并点击Next
hive数仓中数据的终点站-可视化报表和即席查询_第19张图片
指定度量字段,并点击Nexthive数仓中数据的终点站-可视化报表和即席查询_第20张图片
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
hive数仓中数据的终点站-可视化报表和即席查询_第21张图片

4)构建cube

点击new, 并点击new cube
hive数仓中数据的终点站-可视化报表和即席查询_第22张图片
填写cube信息,选择cube所依赖的model,并点击next
hive数仓中数据的终点站-可视化报表和即席查询_第23张图片

选择所需的维度,如下图所示
hive数仓中数据的终点站-可视化报表和即席查询_第24张图片

选择所需度量值,如下图所示
hive数仓中数据的终点站-可视化报表和即席查询_第25张图片

cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期。
hive数仓中数据的终点站-可视化报表和即席查询_第26张图片

Kylin高级配置(优化相关,暂时跳过)
hive数仓中数据的终点站-可视化报表和即席查询_第27张图片

Kylin相关属性配置覆盖
hive数仓中数据的终点站-可视化报表和即席查询_第28张图片

Cube信息总览,点击Save,Cube创建完成
hive数仓中数据的终点站-可视化报表和即席查询_第29张图片

构建Cube(计算),点击对应Cube的action按钮,选择build
hive数仓中数据的终点站-可视化报表和即席查询_第30张图片

选择要构建的时间区间,点击Submit
hive数仓中数据的终点站-可视化报表和即席查询_第31张图片

点击Monitor查看构建进度
hive数仓中数据的终点站-可视化报表和即席查询_第32张图片

1.3 构建错误

1)每日全量维度表及拉链维度表重复Key问题如何处理
按照上述流程,会发现,在cube构建流程中出现以下错误
hive数仓中数据的终点站-可视化报表和即席查询_第33张图片
错误原因分析:
上述错误原因是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中导入新创建的视图,之前的维度表,可选择性删除。
hive数仓中数据的终点站-可视化报表和即席查询_第34张图片
(3)重新创建model、cube。

你可能感兴趣的:(数仓项目,1024程序员节)