什么是kylin?

Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay公司开发并贡献到apche开源社区成为顶级项目的,他也是第一个由中国。它能在亚秒内查询巨大的Hive表。

概念预知:

  • 数据仓库: 各种数据(包括历史数据和当前的数据)的存储中心系统,简单的来说数据仓库就是hive中的数据库和数据表
  • 补充: 这里所说的各种数据主要包括以下三个方面:
  1. 来自公司业务系统的订单、下单、交易、库存、客户、供应商等
  2. 来自企业所处行业竞争对手的数据
  3. 来自企业所处的其他外部环境中的各种数据

那么问题来了说了这么多数据仓库,他到底是干什么的呢?

其实,他是服务于BI的,那么问题又来了什么是BI

  • BI 其实一句话就是我们根据数据仓库里的所有数据规律,有自己的数也有竞争对手的数据,通过分析这些数据找到数据的规律,然后利用这些规律为公司做自己的决策,比如我们找到销售额和商品定价的关系,那么我们以后的商品定价就变得简单如何定价?定多少有竞争力。这就是BI,帮助企业做决策的工具。

那么我们为了分析数据规律,我们就需要利用数据仓库联机分析处理工具(OLAP引擎)数据挖掘等技术

那么问题又来了,

什么是OLAP引擎呢?

  • OLAP 其实就是可以让数据分析人员迅速和、一致、交互的从多个角度观察数据信息,以达到深入理解数据的目的的一种技术,这里的多个角度分析数据就是多维分析数据,因此OLAP引擎也称为多维分析

我们来举个例子:这里是一张订单表,加入我们要分析订单金额总额的规律,

订单id

下单地区

下单品类

下单时间

订单金额

1001

华北

电子

12月

49939

1002

华东

食品

11月

37839

1003

华南

电子

10月

38930

1004

西南

居家

2月

49132

1005

东北

宠物

11月

89737

1006

华北

食品

12月

38373

这很明显就需要从不同的角度去去观察这些数据,现在我们先不关心我们如何去分析这些数据,我们关心什么呢?我们关心我们现在有多少种角度去观察这些数据,那么我们是不是就可以按照下单地区、下单品类、下单时间这些角度去考虑问题,

kylin 连接hive源 kylin和hive的关系_kylin 连接hive源


那么我们问题来了我们有没有其他的角度去分析呢?当然是有的,其实我们还可以使用多种角度联合的方式来实现对数据的分析,那么问题来了我们一共可以从多少种数据分析的维度来分析这个规律呢?


其实我们可以发现这是满足二项式定理的:也就是满足

C30+C31+C32+C33 = 2^3

,当然我们不能算没有角度分析的

C30

这种情况所以我们总共是需要

(2^3 - 1)

种角度去分析这些数据,那么如果是

n

各维度我们就需要有

(2^n - 1)

种角度。所以还是这个例子其实我们有如下7种角度可以去分析。

那么我们现在有7中角度去分析这个规律,我们可以如何实现呢?
其实最简单的我们经常使用的就是写sql比如:我们可以使用如下sql进行分析

SELECT
    `地区`,
    `品类`,
    `时间`,
    SUM(`订单金额`)
FROM '订单表'
GROUP BY `地区`,`品类`,`时间`;

由以上的sql我们可以知道group by后的字段其实就是维度信息,如下图所示:

kylin 连接hive源 kylin和hive的关系_OLAP_02


这些不同的角度其实也都可以这样分析,不同的角度只是group by的维度(也就是字段)不一样。

通过以上我们简单了解了OLAP引擎,其实sql也只是OLAP分析数据的一种形式,那么问题来了OLAP还有那种数据分析的类型呢?

OLAP引擎的类型:

其实OLAP引擎有如下两种类型:

kylin 连接hive源 kylin和hive的关系_基本概念_03

  • ROLAP:
    其实,刚才写sql的方式其实就是ROLAP它基于关系型数据库,也就是说数据是放在关系型数据库中的,这样我们在查询时直接写sql分析我们的数据就可以,不需要预计算。
  • MOLAP:
    另一种就是MOLAP他与ROLAP不同的是他是基于多维数据集的,需要预计算,我们也看到ROLAP是不需要预计算的。

多维数据集

那么问题来了什么是多维数据集,什么又是预计算呢?为什么要进行预计算呢?大家现在可能还不太理解,且听我说。

什么是多维数据集

首先,我们来说多维数据集到底是什么?

多维数据集其实专业术语是OLAP CubeCube其实是立方体的意思,那这里为什么将多维数据集称为立方体呢?

MOLAP基于多维数据集,一个多维数据集被称为一个OLAP Cube,那么我们来举个例子说明一下,同样我们现在还是用刚才的订单表,我们说MOLAP是基于多维数据集的,那么我们来看一看这个多维数据集是怎么存储数据的

kylin 连接hive源 kylin和hive的关系_Kylin_04

kylin 连接hive源 kylin和hive的关系_kylin 连接hive源_05


我给大家画了一个图,其实这里有三个维度,所以我画的是三维的立方体,但是这是在这个例子中只有三个维度,其实这个在实际的问题中是有很多维度的,也就是说

Cube虽然是立方体的意思但是并不是说他只能有三维,它可以是n维的当然 n>= 0, 也就是说不论是多少维他都是一个Cube。

由这个三位坐标系我们可以看到我们是从三个维度进行数据的分析的,它的三个维度(时间、地区、品类)就是坐标系的三个坐标

X、Y、Z


而三者共同确定小立方体代表的是什么呢或者说里面存储的数据是什么含义呢?是订单金额吗?其实他不是的,那是什么呢?我们就以西南地区2月份居家品类为例来说明,其实它应该代表是西南地区2月份居家品类的所有订单的总额,也就是说

小立方体中的数据实际上是通过分析规则(sql)统计出来的结果

,在这个例子中就是三个维度下订单的总和。

它所代表并不是一条条数据明细,而是数据的统计结果。这其实就是我们所谓的多维数据集


所以

在小立方体中存储的其实是聚合后的结果

,所以想向小立方体中存储数据是不是就要预先进行计算呢?

只有先计算出结果才能进行存储

,这也就是我们刚才所说的什么是预计算,为什么要进行

预计算

预计算(Cube)

那这样有什么好处呢?其实大家可以设想一下,我们在进行查询时,查询的只是我们需要的结果,而不是再去扫描数据表,进行聚合计算操作了,是不是就是在效率上提高了呢。其实从这里我们可以看出MOLAP这种OLAP引擎方式其实是牺牲空间换取时间的方式来实现的,在海量数据查询中也就是大数据场景下这显然是值得的。

我们在来思考现在我们通过这个三维坐标来解决问题是通过几个角度来解决的呢?换句话来说,如果我们现在只统计西南地区2月份订单金额的数据现在的Cube里能统计出来吗?

显然我们是统计不出来的因为这个三维小立方体中的数据根本就没有只有地区时间这两个维度的数据聚合结果,所以这也只是分析问题的其中一个角度,那么问题来了,既然只是分析问题的一个角度,它能算是一个OLAP Cube吗?其实在OLAP中这就是一个Cube了,但是我们刚才说了这个问题我们可以通过(2^3-1=7)个角度分析对不对,那么就问题来了,这个订单总额的统计是不是还有其他的Cube呢?下面我又画了几个图给大家解释上面的两个问题?

那么问题来了,我们现在想使用时间和品类进行统计应该怎办呢?是不是就是把地区的维度给去掉就可以了呀,按照这个思路,那么我们的图就来了?大家来看

kylin 连接hive源 kylin和hive的关系_OLAP_06

当然后边的两个图下面的几个角度类似,这个图太难画了,我就画了一个,希望大家能理解下

Cuboid(长方体)

其实,在这里我还要和大家介绍一个概念,他和刚才的Cube属于不同的范畴,但有描述的是同一个东西,那就是Cuboid(长方体)这样一个概念,其实,在OLAP引擎里面并没有这样一个概念,他是kylin(麒麟)中的概念,在麒麟中把所有的角度构成的多维立方体统称为一个Cube,而每一个角度的维度立方体叫做Cuboid,也就是说在麒麟中所有的Cuboid组合在一起才叫Cube。这一点要和OLAP引擎区分开,只是同一个东西在不同的地方叫不同的名字,在OLAP引擎中都叫Cube,而在kylin(麒麟)中就要区别对待。还有就是这些Cuboid在存储时都是存储到一起的。

其实,到这里大家应该早就看出来了,Kylin就是OLAP引擎中的MOLAP处理方式,其实它的核心是Cube和Cuboid,Cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引指向的数据聚合结果而不访问原始数据,同时避免了数据的聚合操作从而实现查询提速。

下面我们还要简单来理解一个概念就是Star Schema(星型模型) 那么我们还是一刚才的订单表为例:

kylin 连接hive源 kylin和hive的关系_Kylin_07

kylin 连接hive源 kylin和hive的关系_kylin 连接hive源_08


那么星型模型是什么意思呢?他其实就是中间一个事实表(fact table)然后周边只有一层维度表(dimension table)而在麒麟中把dimension table叫做lookup table(查找表),我们在数据仓库建模的时候其实大多数使用的都是星星模型,其实除了星型模型外还有雪花模型星座模型.。

下简单的说一下雪花模型,什么是雪花模型呢?简单的可以理解维星星模型在外面又加了一层或者几层维度表。如图所示,看起来像雪花一样有很多分支。

kylin 连接hive源 kylin和hive的关系_基本概念_09


还有一个概念其实就是在麒麟中dimension(维度)&Measure(度量),我们还是用用订单表来说明:

kylin 连接hive源 kylin和hive的关系_大数据_10


所以维度就是我们分析问题的一个个表中类别的字段,度量就是被分析的数据,到这里所有的概念和术语就说完了。下面我们进行kylin的架构的介绍。