文章目录

  • 一 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简介,安装和使用相关推荐

  1. 数据仓库之电商数仓-- 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 ...

  2. 数据仓库项目(第五节)数仓理论、电商业务数仓介绍与创建

    目录 数仓理论 表的分类 实体表 维度表 事务型事实表 周期型事实表 同步策略 实体表同步策略 维度表同步策略 事务型事实表同步策略 周期型事实表同步策略 范式理论 范式概念 函数依赖 三范式区分 关 ...

  3. 电商离线数仓项目实战(下)

    电商离线数仓项目实战(下) 电商分析--核心交易 文章目录 电商离线数仓项目实战(下) 电商分析--核心交易 一.业务需求 二.业务数据库表结构 1. 数据库表之间的联系 img 2. 业务数据库-- ...

  4. 电商离线数仓-业务数仓指标(GMV主题/转化率主题)

    GMV和转化率 GMV主题 GMV的概念 GMV表的创建 GMV表里导入数据 转化率 转化率概念 转化率表的创建 转化率表里导入数据 ADS层用户行为漏斗分析 GMV主题 GMV的概念 什么是GMV? ...

  5. 【电商数仓】数仓即席查询之Presto简介,安装,Presto优化之数据存储、查询SQL、一些注意事项

    文章目录 一 Presto简介 1 Presto概念 2 Presto架构 3 Presto优缺点 4 Presto.Impala性能比较 二 Presto安装 1 Presto Server安装 2 ...

  6. 尚硅谷大数据项目之电商数仓(4即席查询数据仓库)

    尚硅谷大数据项目之电商数仓(即席查询) (作者:尚硅谷大数据研发部) 版本:V4.0 第1章 Presto 1.1 Presto简介 1.1.1 Presto概念 1.1.2 Presto架构 1.1 ...

  7. 离线数仓搭建_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. ...

  8. 电商数仓数仓环境搭建

    1.hive环境搭建 1.1.hive引擎简介 Hive引擎包括:默认MR.tez.spark Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变 ...

  9. 大数据电商离线数仓项目-上篇

    下一篇:电商数仓项目-下篇 文章目录 第1章 数仓分层 1.1 为什么要分层 1.2 数据集市与数据仓库概念 1.3 数仓命名规范 1.3.1 表命名 1.3.2 脚本命名 1.3.3 表字段类型 第 ...

  10. 大数据电商离线数仓项目-下篇

    上一篇:电商数仓系统1 文章目录 第5章 数仓搭建-DWS层 5.1 业务术语 5.2 系统函数 5.2.1 nvl函数 5.2.2 日期处理函数 5.2.3 复杂数据类型定义 5.3 DWS层 5. ...

最新文章

  1. 如何升级浏览器_Chrome谷歌浏览器秒变科研神器,让你的效率提升10倍!
  2. 用户细分_基于购买历史的用户细分
  3. 19级:班级日常分享 | 一天一瞬间
  4. 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片
  5. android 测试人员测试时使用release版本还是debug版本_为什么做软件测试
  6. android uri parcel,Android ParcelFileDescriptor实现进程间通信
  7. coreseek java_coreseek
  8. 【Arduino】基于Arduino的循迹小车电路连接与程序编写
  9. Vlmcsd: 自建 KMS 激活服务器
  10. PE文件偏移地址分析
  11. 安全红蓝对抗反制(反捕、画像)
  12. 通讯录管理系统(C++)
  13. C语言将CSR存储模式转为coo,spmv_csr 稀疏矩阵的DIA/ELLPACK/COO/CSR/HYB表示形式 - 下载 - 搜珍网...
  14. 【自媒体营销神器】一键自动下载短视频并分发至长视频平台脚本开源展示
  15. 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。...
  16. carsim2019.1下载安装包
  17. 程序员的节日1024
  18. CAD填充图案如何缩放
  19. 解决Win10系统电脑使用耳机听歌、看视频、看网页只有伴奏背景音没有人声的方法
  20. 浏览器 pad android,腾讯发布 QQ浏览器 HD for Android Pad,加速布局手机浏览器

热门文章

  1. JavaWeb学习思维导图
  2. z2屏幕坏如何从计算机导出数据,闪回收-手机屏幕坏了如何导出数据?手机屏幕坏了怎么用电脑控制?...
  3. SVN图标不显示解决方案
  4. QuantLib教程(三)BS模型、二叉树模型与欧式期权定价
  5. 小白教程:Python爬取12306车票信息以及后期数据处理
  6. (1.6w字)浏览器灵魂之问,请问你能接得住几个?
  7. 【算法笔记】树形DP算法总结详解
  8. python3 爬虫 HTTP Error 403:Forbidden
  9. 学生免费获取PyCharm专业版
  10. engineercms整合mindoc