月眸


Kylin构建原理

毛毛小妖 2020-03-24 554浏览 0条评论
首页/正文
分享到: / / / /

一、相关术语

1.维度:即观察数据的角度

比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察。因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、最大和最小值等聚合计算。

2.度量:即被聚合(观察)的统计值,也就是聚合运算的结果。

比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少。

3.OLAP

联机分析处理,也称为多维分析。

4.Kylin

Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。

二、Kylin构建原理

1.Kylin如何实现超大数据集的秒级多维分析查询呢?

预计算。

对于大数据集的复杂运算,即时查询需要花费很多时间,根据空间换时间的原理,我们就可以提前将所有可能的计算结果计算并存储下来,从而实现超大数据集的秒级多维分析查询。

2.Kylin的预计算是怎样实现的?

将hive中的事实表数据按照指定的维度和指标由MapReduce计算引擎离线计算出所有可能的查询结果,存储到Hbase中。

3.Cube 和 Cuboid是什么?

一个cube就是一个Hive表的数据按照指定维度与指标计算出的所有组合结果。

其中每一种维度组合称为cuboid,一个cuboid包含一种具体维度组合下所有指标的值。

如下图,整个立方体称为1个cube,立方体中每个网格点称为1个cuboid,图中(A,B,C,D)和(A,D)都是cuboid,特别的,(A,B,C,D)称为Base cuboid。cube的计算过程是逐层计算的,首先计算Base cuboid,然后计算维度数依次减少,逐层向下计算每层的cuboid。

三、Cube存储原理

Cuboid 的维度和指标最终转换为HBase的KV结构存储在Hbase中。也就是说:Cuboid的维度会映射为HBase的Rowkey,Cuboid的指标会映射为HBase的Value

1.维度字典表:

为了节省资源,Kylin会对维度值进行字典编码,如图:

图中,hive表中有三个维度列:customer_address、product_catogory、order_date,有一个指标列price。

图中分别对三个维度进行了字典编码,比如北京和上海依次编码为0和1。

2.Cube在Hbase中的存储结构

如上图所示:在计算cuboid过程中,会将Hive表的数据转化为HBase的KV形式。

Rowkey的具体格式是:cuboid id + 具体的维度值。比如第一行数据的维度组合是(customer_address、product_catogory、order_date),所以cuboid id 就是111,具体维度值是北京、电子和2019-01-09,所以编码后的维度值对应上图的字典编码是000,所以HBase的Rowkey就是111000,对应的HBase Value就是sum(priece)的具体值。

所有的cuboid计算完成后,会将cuboid转化为HBase的KeyValue格式生成HBase的HFile,最后将HFile load进cube对应的HBase表中。

3.Cube构建算法

3.1.逐层构建

从最高维度依次往下降:每一轮的计算都是一个MapReduce任务,且串行执行;一个N维的Cube,至少需要N次MapReduce Job。

3.2.快速构建

思想跟逐级降维一样,只是降维过程都在map端的内存中进行,最终将所有的map输出到reduce端。

最后修改:2020-03-24 20:14:34 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇
登录即可评论哦~

评论列表

还没有人评论哦~赶快抢占沙发吧~