kylin理论

一、 OLAP(online analytical processing)

1.1 OLAP(online analytical processing)联机分析处理是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。从各方面观察信息,也就是从不同的维度分析数据,因此OLAP也成为多维分析。

订单id    下单地区    下单品类    下单时间    订单金额
1001        华北       电子        12月        456
1002        华东       食品        11月        489
1003        西南        居家        2月        491
1004        东北        电子        4月        659
1005        西北        宠物        11月       369
1006        华北        食品        12月       159

分析订单金额总和的规律,需要从不同角度去观察

角度1:地区
角度2:品类
角度3:时间
角度4:地区,品类
角度5:地区,品类
角度6:品类,时间
角度7:地区,品类,时间

一共有2^n - 1个角度。

1.2 OLAP类型

  • ROLAP(Relational OLAP) 基于关系型数据库,不需要预计算。
  • MOLAP(Multidimensional OLAP) 基于多维数据集,需要与计算。

提供SQL接口,select xxx from xx group by 维度;

1.3 OLAP Cube

MOLAP基于多维数据集,一个多维数据集成为一个OLAP Cube.

订单id    下单地区    下单品类    下单时间    订单金额
1001        华北       电子        12月        456
1002        华东       食品        11月        489
1003        西南        居家        2月        491
1004        东北        电子        4月        659
1005        西北        宠物        11月       369
1006        华北        食品        12月       159

1.4 cube(立方体)和cuboid(长方体)

给定一个数据模型,我们可以对其上的所有维度进行聚合,对于N个维度来说,组合的所有可能性共有2n种。对于每一种维度的组合,将度量值做聚合计算,然后将结果保存为一个物化视图,称为Cuboid。所有维度组合的Cuboid作为一个整体,称为Cube。
如:
有一个电商的销售数据集,其中维度包括时间[time]、商品[item]、地区[location]和供应商[supplier],度量为销售额。那么所有维度的组合就有24 = 16种,如下图所示:


image.png

一维度(1D)的组合有:[time]、[item]、[location]和[supplier]4种;
二维度(2D)的组合有:[time, item]、[time, location]、[time, supplier]、[item, location]、[item, supplier]、[location, supplier]3种;
三维度(3D)的组合也有4种;
最后还有零维度(0D)和四维度(4D)各有一种,总共16种。
每一种维度组合就是一个Cuboid,16个Cuboid整体就是一个Cube

1.5 Dimension(维度) & Measure(度量)


维度
度量

二、kylin架构

kylin架构

Routing(路由层):默认设置位false。为true时,kylin在hbase查不到数据就从数据源hive去查。

预计算过程:
Kylin从Hive中读取原始数据,按照我们选定的维度进行计算,并将结果集保存到Hbase中,默认的计算引擎为MapReduce,可以选择Spark作为计算引擎。

三、cube存储原理

维度字典表

给distinct维度建字典表。

hbase存储原理

有该维度就为1,加上维度字典表查到的字典值作为hbase的rowKey,例如:
“北京 电子 2019-01-09 ¥100” 对应的rowKey就是 111+000.

四、cube构建算法

4.1 逐层构建算法(layer)

image.png

一个N维的Cube,是由1个N维子立方体、N个(N-1)维子立方体、N*(N-1)/2个(N-2)维子立方体、......、N个1维子立方体和1个0维子立方体构成,总共有2^N个子立方体组成,在逐层算法中,按维度数逐层减少来计算,每个层级的计算(除了第一层,它是从原始数据聚合而来),是基于它上一层级的结果来计算的。比如,[Group by A, B]的结果,可以基于[Group by A, B, C]的结果,通过去掉C后聚合得来的;这样可以减少重复计算;当 0维度Cuboid计算出来的时候,整个Cube的计算也就完成了。
每一轮的计算都是一个MapReduce任务,且串行执行;一个N维的Cube,至少需要N次MapReduce Job。


逐层构建算法MR图

可以看到每一轮都有一个MR任务,N维对应至少N个MR job

4.2 快速构建算法

每个Mapper将其所分配到的数据块,计算成一个完整的小Cube 段(包含所有Cuboid)。每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果。如下图


快速cube算法MR执行图

五、cube构建优化

5.1使用衍生维度(derived dimension)

衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们。Kylin会在底层记录维度表主键与维度表其他维度之间的映射关系,以便在查询时能够动态地将维度表的主键“翻译”成这些非主键维度,并进行实时聚合。


衍生维度原理

并不是说所有维度表上的维度都得变成衍生维度,如果从维度表主键到某个维度表维度所需要的聚合工作量非常大,则不建议使用衍生维度。

5.2 使用聚合组(Aggregation group)

5.3 Row Key优化

5.4 并发粒度优化

六、zepplin使用

zepplin和jupyter有很相似的使用方法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容