文档章节

kylin入门到实战

hblt-j
 hblt-j
发布于 2018/12/10 16:20
字数 2661
阅读 13
收藏 0

1.概述

kylin是一款开源的分布式数据分析工具,基于hadoop之上的sql查询接口,能支持超大规模的数据分析。响应时间在亚秒级别,其核心是预计算,计算结果存放在hbase中。

 

2.特性

  • 可扩展超快OLAP引擎:
    Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计

  • Hadoop ANSI SQL 接口:
    Kylin为Hadoop提供标准SQL支持大部分查询功能

  • 交互式查询能力:
    通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能

  • 多维立方体(MOLAP Cube):
    用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体

  • 与BI工具无缝整合:
    Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合

  • 其他特性:
    Job管理与监控
    压缩与编码
    增量更新
    利用HBase Coprocessor
    基于HyperLogLog的Dinstinc Count近似算法
    友好的web界面以管理,监控和使用立方体
    项目及立方体级别的访问控制安全
    支持LDAP

 

3.相关概念

3.1 Fact Table(事实表):
事实表是指包含了大量不冗余数据的表,其列一般有两种,分别为包含事实数据的列,包含维表foreign key的列。
3.2 Lookup table:包含了对事实表的某些列扩充说明的字段。
3.3 Dimenssion Table(维表):
由fact table和lookup table 抽象出来的表,包含了多个相关的列,提供对数据不同维度的观察,其中每列的值的数目称为cardinatily。
3.4 model:用来定义用户需要使用的hive表名,及所包含的维度列、度量列、partition列和date格式。
3.5 cube:用来定义某具体查询时会涉及到的维度列及相互之间的关系(如层级关系)、度量列的具体类型(如max,min,sum)等,一个model下可存在多个cube。

1.什么是cube?

cube是所有dimession的组合,每一种dimession的组合称之为cuboid。某一有n个dimession的cube会有2n个cuboid,如图: 
cube 
对应一张hive表,有time,item,location,supplier这四个维度,则0-D cuboid时对应的查询语句为 select sum(money) from table;1-D cuboid对应的查询语句有四个,分别为select sum(money) from table group by time,以及select sum(money) from table group by item,以及select sum(money) from table group by location。对应的在2-D时group by 后面的维度会是time,item,location,supplier两两组合。如果不采取优化措施,理论上kylin在预计算过程中会对上述每一种组合进行预计算,随着维度的增加,计算量将会呈几何倍数的增长。为了解决这种问题,kylin对dimession做了分类,见下文。

 

2.dimession

为了减少cuboid的数量,kylin对dimession做了如下分类 
normal:最为普通常见的dimession类型,与其他类型的dimession组成cuboid。 
mandatory:每次查询均会使用到的dimession,在下图中A为Mandatory dimension,则与B、C总共构成了4个cuboid,相较于normal dimension的cuboid(23=8)减少了一半。 
dimession 
在实际生产应用中,比如对于日报表的分析,可能日期就是一个mandatory dimession。 
hierarchy:带层级的dimession,如:年->月->日,要求子级的父级必须存在。如下的例子中cuboid由2n降为了n+1。 
hierarchy 
然而,Kylin的Hierarchy dimensions并没有做集合包含约束,比如:kylin_sales_cube定义Hierarchy dimension为META_CATEG_NAME->CATEG_LVL2_NAME->CATEG_LVL3_NAME,但是同一个CATEG_LVL2_NAME可以对应不同META_CATEG_NAME。因此,hierarchy 显得非常鸡肋,以至于在Kylin后台处理时被废弃了。 
derived:指该dimession与维表的primary key是一一对应的关系,可以有效减少cuboid的数量,derived dimession只能由Lookup Table生成。 
derived

 

3.measure

measure为事实表的度量值,kylin提供了下面几个函数: 
sum,count,max,min,avarage,count_distinct 
其中count_distinct有两种实现方式: 
(1)近似Count Distinct。Apache Kylin使用HyperLogLog算法实现了近似Count Distinct,提供了错误率从9.75%到1.22%几种精度供选择; 
算法计算后的Count Distinct指标,理论上,结果最大只有64KB,最低的错误率是1.22%;这种实现方式用在需要快速计算、节省存储空间,并且能接受错误率的Count Distinct指标计算。 
(2)准Count Distinct。从1.5.3版本开始,Kylin中实现了基于bitmap的精确Count Distinct计算方式。当数据类型为tiny int(byte)、small int(short)以及int, 
会直接将数据值映射到bitmap中;当数据类型为long,string或者其他,则需要将数据值以字符串形式编码成dict(字典),再将字典ID映射到bitmap; 
指标计算后的结果,并不是计数后的值,而是包含了序列化值的bitmap.这样,才能确保在任意维度上的Count Distinct结果是正确的。 
这种实现方式提供了精确的无错误的Count Distinct结果,但是需要更多的存储资源,如果数据中的不重复值超过百万,结果所占的存储应该会达到几百MB。

前面两篇文章已经介绍了kylin的相关概念以及cube的一些原理,这篇文章将从一个实际的案例入手,介绍如何在kylin平台上创建一个多维分析项目。

 

1.创建project

进入kylin操作界面,如果没有project可以创建,kylin里面可以创建多个project,有效的把各种业务数据分析隔离开来。如图:
project
如下,填写project name,description可以不填
project
然后submit 提交,project创建成功。

 

2.添加数据源

点击DataSource选项卡->Load Hive Table
ds
填写hive表名,前面加上库名
ds
然后点击sync,导入数据源成功,可以看到如下信息:
ds

 

3.创建model

model

添加model name然后 next
model
选择刚才添加到数据源中的事实表,如果有Lookup Table也可添加,然后next
model
选择需要的维度
model
选择需要的指标
model
相关设置
model
partition date colume表示分区字段,选择hive表中按时间分区的字段。然后从date format中选择不同的时间格式。最下面的filter可以添加where条件对数据源中的数据做过滤。
至此,model创建完成。

 

4.创建cube

下面进入关键环节创建cube。
类似于创建model,创建cube。选择之前创建好的model,并填入cube name。notification email list是选填项,表示报警接收人邮件地址,多个邮件地址以逗号隔开。
cube
然后next。选择dimession,有两种方式:一是手动添加dimession,二是使用自动生成,我们这里使用自动生成,然后勾选需要的字段。
cube
cube
然后next,选择指标
cube
count(1)是系统默认自带的,不要删除。
点击+号添加需要的指标,需要填入名称,选择表达式。这里选择的是sum。我们要针对disp加和求pv,在param value里面选择disp列。
需要注意的是kylin中hive表中每一列字段的类型要求比较严格。dimession字段需要为String,用来加和的指标字段须为bigint或者decimal
添加了所有需要的指标后,点击next
cube
设置merge时间。Kylin每次build会生成一张hbase表,merge操作会把多天数据合并成一张新的hbase表。可加快查询。
设置partition Start Date,即数据源开始时间,默认为1970-01-01.点击Next.
cube
Mandatory Dimensions:每次查询均会使用的维度可添加在此。比如某些情况下的partition column.
Hierarchy Dimensions:维度列中彼此间存在层级关系的列,比如“国家-省份-市-县”
Joint Dimensions:每次查询会同时使用或不使用的维度组合。
Aggregation Group:在不同的查询中,两组维度组合之间不会产生交叉,可选择此选项,比如所有的cube维度有 [ a,b,c,d,e,f ] 6个,每次查询中只会同时查与 [ a,b,c ] 相关的信息(比如[a],[a,c]等)而不会查询 [ d,e,f ],或者相反,则可选择此选项。
以上选择均可减少build过程中的数据量,是加快build与query速度的优化点之一。
接下来基本上就是next,然后保存,如果没有报错,则证明cube创建成功,如下图
cube

 

5.cube其他操作

最常用的就是build操作,它会根据我们创建的cube进行数据的预计算。
build
选择构建的终止时间,然后提交,之后可以在monitor中看到cube构建的状态。
build
其他操作说明:
Drop:丢弃现有cube,条件:无Pending, Running, Error 状态的job.
Edit:编辑现有cube,条件:cube需处于disable状态。
Refresh:重建某已有时间段数据,针对于已build时间段的源数据发生了改变的情况。
Merge:手动触发merge操作。
Enable:使拥有至少一个有效segment的cube从disable变为enable状态。
Purge:清空所有该cube的数据。
Clone:克隆一个新的cube,可设置新的名字,其他相关配置与原cube相同。
Disable:使一个处于ready状态的cube变为Disable状态,查询不会从disable的cube中获取数据。

 

6.查询操作

数据预计算完成后就可以进行查询了,查询过程中也可以验证cube创建的是否有问题。有两种查询方式:一种是通过kylin的web界面,一种是使用kylin提供的rest api。下面分别介绍。
(1)web查询。进入insight,输入sql语句,等待查询结果,和一般的数据库客户端类似。
(2)rest api。举例如下:
假如需要查询的sql语句为:“select sum(disp) as pv from t_table group by td,bd”
kylin账户的账号密码为:“kylinid:passwd”,对其进行base64加密。secret=echo -n “kylin_id:password” | base64
使用的project为:my_kylin_project
接口地址为:http://localhost:7070/kylin/api/query
则请求为:

bash    2行

curl -X POST -H "Authorization:Basic ${secret}" -H "Content-Type:application/json" -d '{ "sql" : "select sum(disp) as pv from t_table group by td,bd", "project" : "my_kylin_project" }' http://localhost:7070/kylin/api/query

本文转载自:http://www.cnblogs.com/bigdataer/p/6707937.html

共有 人打赏支持
hblt-j
粉丝 21
博文 177
码字总数 71424
作品 0
海淀
架构师
私信 提问
Apache Kylin在链家GAIA大数据平台中的实践

Apache Kylin在链家GAIA大数据平台中的实践 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联...

qq_27384769
2018/05/10
0
0
Apache Kylin v1.5.2 正式发布

Apache Kylin社区非常高兴宣布Apache Kylin v1.5.2正式发布。 Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBa...

zkld123
2016/05/26
3.6K
4
Apache Kylin 1.3.0 发布, OLAP 分析引擎

Apache Kylin 1.3.0 发布了,Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口和 OLAP 接口,支持 TB 到 PB 级别的数据量。 Kylin 是: 超级快的 ...

oschina
2016/03/15
2.8K
4
高手问答第 145 期 — 开源的分布式分析引擎 Apache Kylin

OSCHINA 本期高手问答(2017 年 3 月 14 日 — 3 月 20 日)我们请来了@shaofengsh (史少锋)和大家探讨开源分布式分析引擎 Apache Kylin 的相关问题。 @shaofengsh 史少峰,Kyligence 技术...

局长
2017/03/13
4K
33
No.4 | Apache Kylin 开发员(Developer)认证培训

8月28日~29日,由 Kyligence 主办的第四期 Apache Kylin 开发员(Developer)认证培训,在大家的热烈期盼下将于上海再次和粉丝们见面,除了满分干货和高效的实操课程,我们还有讲师在前线积累...

ApacheKylin
2018/08/20
2
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
43分钟前
2
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
48分钟前
1
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
2
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
2
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部