浅谈Apache Kylin基础知识

Table of Contents

一:介绍

1.1 Kylin是什么?

1.2 为什么要用Kylin?

 二:工作原理

2.1 维度和度量,Cube和Cuboid

2.2 工作原理 

2.3 技术架构


一:介绍

1.1 Kylin是什么?

Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。

同时Kylin也是第一个由中国人主导开发的Apache顶级项目。

1.2 为什么要用Kylin?

我国的14亿人口为我国的大数据发展带来了巨大的挑战,同时挑战必然会推动我国大数据的发展,可见人口众多还是有很多优点的[手动滑稽]。随着数据量指数级的增长,传统的分析引擎比如Hive的查询速率会随着数据量的增加而线性上升。即使现在各公司的集群扩展性好,再加个几十台几百台服务器增加计算能力,但是这种做法治标不治本,不仅对公司要求较高,而且也只能解决当下的燃眉之急,5G来临后会再次引爆数据,更多的数据怎么办?

Kylin应运而生。Kylin引用了一种新思路——“预计算”。什么是“预计算”?

举一个例子:例如我国每年高考有1000万考生,每个考生有四门课,按照数据库三范式的第一范式原则,共有4000万条数据,每个学生对应4条数据。假设数据格式为(“name”,“subject”,“score”),我现在想查询subject=‘数学’的总分(虽然毫无意义),写下如下SQL:

select subject,sum(score) as sum
from student
group by subject
having subject='数学'

 我只想对总数据的1/4进行操作,但却扫描了所有的数据,如果数据量是4个亿40个亿呢?“欲计算”就是解决这个问题,他先按维度(“subject”,“score”)计算(“subject”,sum(score))并将其保存下来,我们在查询的时候,无论你查询的是“数学”,还是“英语”,就仅仅需要查询对应维度里面的1000万条数据,也省去了聚合的操作,极大地提升了性能。

“预计算”就是Kylin在“大规模并行处理”和“列式存储”之外,提供给大数据分析的第三个关键技术。

 二:工作原理

阅读下文之前,建议先对数仓的概念有所了解,可以看这篇:https://blog.csdn.net/yxf19034516/article/details/107245337

 Kylin工作原理本质上是MOLAP(Multidimensional OnLine AnalysisProcessing) Cube,也就是多维立方体。

2.1 维度和度量,Cube和Cuboid

维度(dimension)和度量(measure)是两个挺简单的概念。拿上面的(“name”,“subject”,“score”)例子来说,维度就是“name”和“subject”,这是两个不同维度,你可以从“name”角度查询,如(where name=‘张三’);也可以从“subject”角度查询,如(where subject=‘数学’);还可以通过“name”和“subject”联合的角度查询,如(where name=‘张三’ and subject=‘数学’)。当然也可以零维度毫无意义的查,如查询所有考生的总成绩。这4个不同维度的查询就是4个不同的Cuboid,4个Cuboid的总和就是一个Cube。简单介绍了Cube和Cuboid的关系,来看以下官方给出的定义:

给定一个数据模型,我们可以对其上所有维度进行组合。对于n个维度来说,所有组合的可能性有2ⁿ种。对每一种维度的组合,将度量做聚合运算,运行的结果保存为一个物化视图,称为Cuboid。将所有的维度组合的Cuboid作为一个整体,被称为Cube。所以简单的说,一个Cube就是许多按维度聚合的物化视图的集合。

那么对应的你想查的确切的值,就是度量,如“score”就是度量,你可以通过不同的维度去分析度量。

2.2 工作原理 

Kylin的工作原理就是对数据模型做Cube欲计算,并利用计算的结果加速查询。过程如下:

  1. 指定数据模型,定义维度和度量。
  2. 预计算Cube,计算所有Cuboid并将其保存为物化视图。
  3. 执行查询时,读取Cuboid,进行加工运算产生查询结果。

Kylin查询数据时不会访问原始数据,而是利用预计算的结果进行计算,所以大大提高了查询效率。 

2.3 技术架构

Kylin的架构主要分为两部分:在线查询和离线构建。如图所示:

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当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决其间出现的故障。

-------------------------------------------------------分割线-------------------------------------------------------------

其中,在线查询由上方的REST服务器和查询引擎组成,离线构建由下方的元数据和Cube构建引擎组成。

从图中可以看到,数据源(左侧)目前主要有Hadoop、Hive、Kafka、RDBMS四种,数据以关系表的方式引入,且必须符合星型模型(Star Schema)或雪花模型(Snowflake Schema)。可以选择Hadoop或者Spark构建,构建后的Cube默认保存在右边的HBase中。

构建完成后,就可以通过上方的查询系统用SQL进行查询了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值