0%

Kylin源码解析-kylin构建流程总览

麒麟出没,必有祥瑞

​ 在上文Kylin源码解析-kylin构建任务生成与调度执行 | 编程狂想 中详细介绍了Kylin构建任务的生成和调度,其中讲到,会调用BatchCubingJobBuilder2的build方法,生成一个CubingJob实例,本文就介绍下这个build方法大致流程,并描述整个构建过程。 如下图所示,分为四个阶段和十四步。

image

阶段一:Create Flat Table & Materialize Hive View in Lookup Tables

第一步:Create Intermediate Flat Hive Table

这一步将数据从Hive表中提取出来(会join所有的维表),并且一起插入到一张临时中间宽表中。会加上时间分区条件确保只有指定时间的数据才会被提取。

第二步:Redistribute Flat Hive Table

上一步,hive在hdfs上的目录里生成了数据文件,但是不均匀,有的很大,有的很小,有的是空的,非常可能在后面的MR程序中导致数据倾斜,有的Mapper很快跑完,其他就很慢,kylin增加了这一步“重新分发”数据。

第三步:Materialize Hive View in Lookup Tables


阶段二:Build Dictionary

第四步:Extract Fact Table Distinct Columns

​ 提取事实表的为一列,这一步kylin运行MR任务提取使用字典编码的维度列的谓一致。这一步还顺带通过HHL计数器手机cube的统计数据,用于估算每个cuboid的行数。

第五步:Build Dimension Dictionary

​ 这一步会根据前面的提取的维度列的谓一致,在内存里面构建字典,然后将字典存在hbase当中,并且修改cube的元数据。

第六步:Save Cuboid Statistics

​ 保存第四步生成的统计数据到cube元数据中。

第七步:Create HTable


阶段三:Build Cube

​ 在hbase中创建htable。

第八步:Build Base Cuboid

​ 这一步用Hive的中间表的数据构建基础cuboid,是“layer”构建cube算法中的第一步。后面的构建会依赖于这个base cuboid。

第九步:Build ND Cuboid

​ 构建N维cuboid,这一步是一个逐层构建的过程,是根据cuboid数组计算出的一个层次,并循环这个层次数层层构建。每一步都会以前一步的输出作为输入,然后去掉一个维度以聚合得到一个子的cuboid。所以层级越往后,构建速度会越快。

第十步:Convert Cuboid Data to HFile

​ 这一步使用MR任务将cuboid文件(序列文件格式)转换为hbase的hfile格式。

第十一步: Load HFile to HBase Table

​ 将上一步生成的hfile使用hbase api导入到region server,轻量快速。


阶段四:Update Metadata & Cleanup

第十二步:Update Cube Info

​ 修改kylin元数据,将对应的cube segment标记为ready。

第十三步:Hive Cleanup

​ 将中间宽表从Hive删除。

第十四步:Garbage Collection on HBase

​ Hbase上的垃圾数据删除。


本文先大致列出相关的阶段和步骤,在后面文章中每个步骤都会详细介绍。

参考文档

Apache Kylin | 优化 Cube 构建


Kylin源码解析系列目录

构建引擎系列

1、Kylin源码解析-kylin构建任务生成与调度执行 | 编程狂想

2、Kylin源码解析-kylin构建流程总览 | 编程狂想

3、Kylin源码解析-构建引擎实现原理 | 编程狂想

4、Kylin源码解析-生成Hive宽表及其他操作 | 编程狂想

5、Kylin源码解析-提取事实表唯一列 | 编程狂想

6、Kylin源码解析-构建层级分析 | 编程狂想

7、Kylin源码解析-构建数据字典和生成Cuboid统计数据

8、Kylin源码解析-生成Hbase表

9、Kylin源码解析-构建Cuboid

10、Kylin源码解析-转换HDFS为Hfile

11、Kylin源码解析-加载Hfile到Hbase中

12、Kylin源码解析-修改元数据以及其他清理工作

查询引擎系列