【电商数仓】数仓即席查询之Kylin简介,安装和使用
文章目录
- 一 Kylin简介
- 0 概述
- 1 Kylin 定义
- 2 Kylin架构
- (1)REST Server
- (2)查询引擎(Query Engine)
- (3)路由器(Routing)
- (4)元数据管理工具(Metadata)
- (5)任务引擎(Cube Build Engine)
- 3 Kylin特点
- 二 Kylin安装
- 1 Kylin依赖环境
- 2 Kylin搭建
- 三 Kylin使用
- 1 创建工程
- 2 获取数据源
- 3 创建model
- 4 构建cube
- 5 使用进阶
- (1)每日全量维度表及拉链维度表重复Key问题如何处理
- (2)如何实现每日自动构建cube
一 Kylin简介
0 概述
即席查询工具:更快查询hive表格的工具。
hive主要慢在查询和join时,hive使用MR引擎,这个引擎在计算时会将同一个计算步骤分成很多份,彼此之间独立,无论map完成还是reduce完成,数据都需要落盘,消耗大量的磁盘IO,导致hive查询速度很慢。
解决方法:
- 自己做一个查询引擎,如presto。
- 通过预计算,以空间换时间,提高查询速度,如kylin。预计算:hive的join操作很慢,假设hive直接从一张表得出数据,不用join,这时效率还可以,Kylin的思想就是需要复杂计算的提前全部计算完,在真正查询的时候,只需要做一些不需要计算的部分。代价就是,预计算的结果需要存储起来,以便供其他人查询,这样通过预计算就会产生一个巨大的结果集,查询时从这个结果集中查出数据,相当于在数仓中添加了一个巨大的中间层。数仓中的DWS和DWT层就是使用这种思想,Kylin扩展了数仓中的DWS和DWT层,将能做的事情全部都做了,但是Kylin不能代替数仓,因为其不能处理复杂的数据类型,而且没有做过索引的数据不能直接查询,只能作为数仓的辅助工具来进行使用,数仓的主流工具还是hive和SparkSQL。
1 Kylin 定义
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
2 Kylin架构
Kylin对外部提供两个接口
REST API:控制Kylin一些行为动作,如构建Cube。
简单理解,Cube就是数仓的中间层,DWD之上,查询之下的中间结果层,一个Cube就是一套DWS体系,Kylin预计算的结果就叫做Cube。
API:通过编程控制框架的行为,Application Programing Interface。
REST API:控制框架行为的方式不再使用编程,而是使用网络请求(get/post),如通过前端中某个按钮去控制框架的行为。如果是普通的API控制框架,需要编写一个java程序,这时如果想做一个前端界面,一般采用前后端分离,前端只负责与人进行交互,所有请求交给后端处理,后端在收到网络请求以后,需要专门编译一个程序,将后端收到的http网络请求转化成程序的标准API接口,这样就会产生一层中间层。如想通过网页向HDFS上传一个文件,需要写一个向HDFS上传文件的java程序,再翻译成HDFS标准API代码才能完成上传,这就是传统API的问题,会多一层,在开发前端界面非常不方便。现在主流的框架都会提供REST API,好处就是不需要中间层,前端直接向框架发送网络请求就能够控制框架的行为,现在上传文件可以直接向框架本身发送一条http请求,不用向中间层发送http请求,可以直接响应前端的请求。
JDBC 接口:供一些第三方BI工具直接调用,实现数据分析。
(1)REST Server
REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。 此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。另外可以通过Restful接口实现SQL查询。
(2)查询引擎(Query Engine)
当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。
(3)路由器(Routing)
在最初设计时曾考虑过将Kylin不能执行的查询,引导去Hive中继续执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。最后这个路由功能在发行版中默认关闭。
(4)元数据管理工具(Metadata)
Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据。其它全部组件的正常运作都需以元数据管理工具为基础。 Kylin的元数据存储在hbase中。
(5)任务引擎(Cube Build Engine)
这套引擎的设计目的在于处理所有离线任务,其中包括shell脚本、Java API以及Map Reduce任务等等。任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决其间出现的故障。
Cube存储在HBase中,以供更快的查询。
HBase:非关系型数据库,在传统的网页里面使用MySQL进行数据存储,将一些关系型数据库存储到MySQL中。对应的大数据体系中,完全取代MySQL的就是HBase,HBase在设计之初就是为了实现高速存取,能够在毫秒级实现数据的插入和数据的读取,代价是HBase需要使用大量的缓存
3 Kylin特点
Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。
- 标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。
- 支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。只要存储空间足够,即使数据集再大,也能够做预计算,解决查询慢的问题,但是Kylin依赖于HBase,HBase在数据集十分大的时候,非常耗费资源。
- 亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
- 可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群,实现并行查询。
- BI工具集成
Kylin可以与现有的BI工具集成,具体包括如下内容。
- ODBC:与Tableau、Excel、PowerBI等工具集成
- JDBC:与Saiku、BIRT等Java工具集成
- RestAPI:与JavaScript、Web网页集成
Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。
二 Kylin安装
1 Kylin依赖环境
安装Kylin前需先部署好Hadoop、Hive、Zookeeper、HBase,并且需要在/etc/profile中配置以下环境变量HADOOP_HOME,HIVE_HOME,HBASE_HOME,source使其生效。
HBase依赖于Zookeeper和HDFS,安装之前需要确保这两个集群运行正常。
HBase严重依赖于HDFS,所以HDFS的从机就是HBase的从机,HDFS的主机就是HBase的主机。
#准备安装包,上传服务器,解压
tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module/
#配置环境变量
sudo vim /etc/profile.d/my_env.sh
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase-2.0.5
export PATH=$PATH:$HBASE_HOME/bin
#修改配置文件
cd /opt/module/hbase-2.0.5/conf/
vim hbase-env.sh
#修改以下内容
# Tell HBase whether it should manage it's own instance of ZooKeeper or not.
# HBase依赖于Zookeeper,所以HBase中自带了一个Zookeeper,以下命令告知它不要使用自带的Zookeeper
export HBASE_MANAGES_ZK=falsevim hbase-site.xml
#添加以下内容<property><name>hbase.rootdir</name><value>hdfs://hadoop101:8020/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop101,hadoop102,hadoop103</value></property>vim regionservers
#添加以下内容
hadoop101
hadoop102
hadoop103#分发到其他机器
xsync hbase-2.0.5/
sudo ~/bin/xsync /etc/profile.d/my_env.sh
#启动集群
start-hbase.sh
参考链接
2 Kylin搭建
# 上传Kylin安装包apache-kylin-3.0.2-bin.tar.gz
# 解压apache-kylin-3.0.2-bin.tar.gz到/opt/module
[hzy@hadoop101 sorfware]$ tar -zxvf apache-kylin-3.0.2-bin.tar.gz -C /opt/module/[hzy@hadoop101 module]$ mv /opt/module/apache-kylin-3.0.2-bin /opt/module/kylin
# Kylin兼容性问题
修改/opt/module/kylin/bin/find-spark-dependency.sh,排除冲突的jar包
# 需要增加的内容:
! -name '*jackson*' ! -name '*metastore*'
# 注意前后保留空格
# Kylin启动
# 启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
# 启动Kylin
[hzy@hadoop101 kylin]$ bin/kylin.sh start
# 启动之后查看各个节点进程:
jpsall
在http://hadoop101:7070/kylin查看Web页面
用户名为:ADMIN,密码为:KYLIN
# 关闭Kylin
[hzy@hadoop101 kylin]$ bin/kylin.sh stop
三 Kylin使用
以gmall数据仓库中的dwd_order_detail作为事实表,dim_user_info、dim_sku_info、dim_base_province作为维度表,构建星型模型,并演示如何使用Kylin进行OLAP分析。
1 创建工程
点击下图中的"+"。
填写项目名称和描述信息,并点击Submit按钮提交。
2 获取数据源
点击DataSource
点击下图按钮导入Hive表
选择以下表格,并点击Sync按钮
dwd_order_detail
dim_sku_info
dim_user_info
dim_base_province
注意事项:
Kylin不能处理Hive表中的复杂数据类型(Array,Map,Struct),即便复杂类型的字段并未参与到计算之中。故在加载Hive数据源时,不能直接加载带有复杂数据类型字段的表。而在dim_sku_info表中存在两个复杂数据类型的字段(平台属性和销售属性),故dim_sku_info不能直接加载,需对其进行以下处理。
在hive客户端创建一个视图,如下。该视图已经将dim_sku_info表中的复杂数据类型的字段去掉,在后续的计算中,不再使用dim_sku_info,而使用dim_sku_info_view。
create view dim_sku_info_view
as
selectid,price,sku_name,sku_desc,weight,is_sale,spu_id,spu_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name,tm_id,tm_name,create_time
from dim_sku_info;
在kylin中重新导入dim_sku_info_view视图
3 创建model
Kylin中的建模就是数仓中的建模,不过它无法使用现有的建模结果,需要自己创建。
维度建模流程:选择业务 – 声明粒度 – 选择维度 – 选择事实
Kylin建模过程:
点击Models,点击"+New"按钮,点击"★New Model"按钮。
填写Model信息,点击Next
指定事实表
选择维度表,并指定事实表和维度表的关联条件,也就是从事实表扩展出的一些其他维度信息,点击Ok
维度表添加完毕之后,点击Next
指定维度字段,并点击Next
指定度量字段,并点击Next
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
4 构建cube
cube中存放预计算的结果。
点击new, 并点击new cube
填写cube信息,选择cube所依赖的model,并点击next
选择所需的维度,如下图所示
选择所需度量值,如下图所示
cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期。
Kylin高级配置(优化相关,暂时跳过)
Kylin相关属性配置覆盖
Cube信息总览,点击Save,Cube创建完成
构建Cube(计算),点击对应Cube的action按钮,选择build
选择要构建的时间区间,点击Submit
点击Monitor查看构建进度
构建使用的是MR,可以在yarn中的日志中查看信息
5 使用进阶
(1)每日全量维度表及拉链维度表重复Key问题如何处理
按照上述流程,会发现,在cube构建流程中出现以下错误
错误原因分析:
上述错误原因是model中的维度表dim_user_info为拉链表、dim_sku_info(dim_sku_info_view)为每日全量表,故使用整张表作为维度表,必然会出现订单明细表中同一个user_id或者sku_id对应多条数据的问题,针对上述问题,有以下解决方案。
在hive客户端为拉链表以及每日全量维度表创建视图,在创建视图时对数据加以过滤,保证从视图中查出的数据是一份全量最新的数据即可。
创建维度表视图
--拉链维度表视图
create view dim_user_info_view as select * from dim_user_info where dt='9999-99-99';--全量维度表视图(注意排除复杂数据类型字段)
create view dim_sku_info_view
as
selectid,price,sku_name,sku_desc,weight,is_sale,spu_id,spu_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name,tm_id,tm_name,create_time
from dim_sku_info
where dt=date_add(current_date,-1);--当前情形先创建一个2020-06-15的视图,由于之前已经创建了dim_sku_info_view,故无需重新创建,修改之前的视图即可。
alter view dim_sku_info_view
as
selectid,price,sku_name,sku_desc,weight,is_sale,spu_id,spu_name,category3_id,category3_name,category2_id,category2_name,category1_id,category1_name,tm_id,tm_name,create_time
from dim_sku_info
where dt='2020-06-15';
在DataSource中导入新创建的视图,之前的维度表,可选择性删除。
重新创建model、cube。
(2)如何实现每日自动构建cube
Kylin提供了Restful API,因次可以将构建cube的命令写到脚本中,将脚本交给azkaban或者oozie这样的调度工具,以实现定时调度的功能。
脚本如下:
#!/bin/bash
cube_name=order_cube
do_date=`date -d '-1 day' +%F`#获取00:00时间戳
start_date_unix=`date -d "$do_date 08:00:00" +%s`
start_date=$(($start_date_unix*1000))#获取24:00的时间戳
stop_date=$(($start_date+86400000))curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$start_date', "endTime":'$stop_date', "buildType":"BUILD"}' http://hadoop101:7070/kylin/api/cubes/$cube_name/build
【电商数仓】数仓即席查询之Kylin简介,安装和使用相关推荐
- 数据仓库之电商数仓-- 5、即席查询Kylin
目录 一.Kylin 1.1 Kylin简介 1.1.1 Kylin定义 1.1.2 Kylin相关术语 1.1.3Kylin架构 1.1.4 Kylin特点 1.2 Kylin安装 1.2.1 Ky ...
- 数据仓库项目(第五节)数仓理论、电商业务数仓介绍与创建
目录 数仓理论 表的分类 实体表 维度表 事务型事实表 周期型事实表 同步策略 实体表同步策略 维度表同步策略 事务型事实表同步策略 周期型事实表同步策略 范式理论 范式概念 函数依赖 三范式区分 关 ...
- 电商离线数仓项目实战(下)
电商离线数仓项目实战(下) 电商分析--核心交易 文章目录 电商离线数仓项目实战(下) 电商分析--核心交易 一.业务需求 二.业务数据库表结构 1. 数据库表之间的联系 img 2. 业务数据库-- ...
- 电商离线数仓-业务数仓指标(GMV主题/转化率主题)
GMV和转化率 GMV主题 GMV的概念 GMV表的创建 GMV表里导入数据 转化率 转化率概念 转化率表的创建 转化率表里导入数据 ADS层用户行为漏斗分析 GMV主题 GMV的概念 什么是GMV? ...
- 【电商数仓】数仓即席查询之Presto简介,安装,Presto优化之数据存储、查询SQL、一些注意事项
文章目录 一 Presto简介 1 Presto概念 2 Presto架构 3 Presto优缺点 4 Presto.Impala性能比较 二 Presto安装 1 Presto Server安装 2 ...
- 尚硅谷大数据项目之电商数仓(4即席查询数据仓库)
尚硅谷大数据项目之电商数仓(即席查询) (作者:尚硅谷大数据研发部) 版本:V4.0 第1章 Presto 1.1 Presto简介 1.1.1 Presto概念 1.1.2 Presto架构 1.1 ...
- 离线数仓搭建_18_PrestoKylin即席查询
文章目录 19.0 即席查询 1.1.1 Presto概念 1.1.2 Presto架构 1.1.3 Presto优缺点 1.1.4 Presto.mpala性能比较 1.2 Presto0安装 1. ...
- 电商数仓数仓环境搭建
1.hive环境搭建 1.1.hive引擎简介 Hive引擎包括:默认MR.tez.spark Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变 ...
- 大数据电商离线数仓项目-上篇
下一篇:电商数仓项目-下篇 文章目录 第1章 数仓分层 1.1 为什么要分层 1.2 数据集市与数据仓库概念 1.3 数仓命名规范 1.3.1 表命名 1.3.2 脚本命名 1.3.3 表字段类型 第 ...
- 大数据电商离线数仓项目-下篇
上一篇:电商数仓系统1 文章目录 第5章 数仓搭建-DWS层 5.1 业务术语 5.2 系统函数 5.2.1 nvl函数 5.2.2 日期处理函数 5.2.3 复杂数据类型定义 5.3 DWS层 5. ...
最新文章
- 如何升级浏览器_Chrome谷歌浏览器秒变科研神器,让你的效率提升10倍!
- 用户细分_基于购买历史的用户细分
- 19级:班级日常分享 | 一天一瞬间
- 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片
- android 测试人员测试时使用release版本还是debug版本_为什么做软件测试
- android uri parcel,Android ParcelFileDescriptor实现进程间通信
- coreseek java_coreseek
- 【Arduino】基于Arduino的循迹小车电路连接与程序编写
- Vlmcsd: 自建 KMS 激活服务器
- PE文件偏移地址分析
- 安全红蓝对抗反制(反捕、画像)
- 通讯录管理系统(C++)
- C语言将CSR存储模式转为coo,spmv_csr 稀疏矩阵的DIA/ELLPACK/COO/CSR/HYB表示形式 - 下载 - 搜珍网...
- 【自媒体营销神器】一键自动下载短视频并分发至长视频平台脚本开源展示
- 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。...
- carsim2019.1下载安装包
- 程序员的节日1024
- CAD填充图案如何缩放
- 解决Win10系统电脑使用耳机听歌、看视频、看网页只有伴奏背景音没有人声的方法
- 浏览器 pad android,腾讯发布 QQ浏览器 HD for Android Pad,加速布局手机浏览器
热门文章
- JavaWeb学习思维导图
- z2屏幕坏如何从计算机导出数据,闪回收-手机屏幕坏了如何导出数据?手机屏幕坏了怎么用电脑控制?...
- SVN图标不显示解决方案
- QuantLib教程(三)BS模型、二叉树模型与欧式期权定价
- 小白教程:Python爬取12306车票信息以及后期数据处理
- (1.6w字)浏览器灵魂之问,请问你能接得住几个?
- 【算法笔记】树形DP算法总结详解
- python3 爬虫 HTTP Error 403:Forbidden
- 学生免费获取PyCharm专业版
- engineercms整合mindoc