1、概述
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。
2、Kylin架构
3、相关概念
OLAP(online analytical processing)从各个方面观察信息,以达到深入理解数据的目的,也称多维分析
OLAP类型
OLAP Cube:MOLAP基于多维数据集,一个多维数据集称为一个OLAP Cube
维度:分析数据的数据的角度
度量:被分析的指标
星型模型:在关系型数据库管理系统中实现的维度模型称为星型模型
事实表:Fact Table
维度表:Dimension Tabel(Kylin里面叫做look-up表)
4、构建cube流程
- 创建中间表
- 将中间表的数据均匀分配到不同文件中
- 创建维度字典表
- 构建cube
- 形成Hbase的key-value
- 将cube data转成HFile格式导入Hbase
cube可以逐层mapreduce构建(一层一个mapreduce),也可以快速构建(逐段构建)
5、构建优化
5.1 使用衍生维度
衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们。Kylin会在底层记录维度表主键与维度表其他维度之间的映射关系,以便在查询时能够动态地将维度表的主键“翻译”成这些非主键维度,并进行实时聚合。
5.2 使用聚合组(Aggregation group)
(1)强制维度(Mandatory),如果一个维度被定义为强制维度,那么这个分组产生的所有Cuboid中每一个Cuboid都会包含该维度。
(2)层级维度(Hierarchy),每个层级包含两个或更多个维度。假设一个层级中包含D1,D2…Dn这n个维度,那么在该分组产生的任何Cuboid中, 这n个维度只会以(),(D1),(D1,D2)…(D1,D2…Dn)这n+1种形式中的一种出现。
(3)联合维度(Joint),每个联合中包含两个或更多个维度,如果某些列形成一个联合,那么在该分组产生的任何Cuboid中,这些联合维度要么一起出现,要么都不出现。
注:这些操作可以在Cube Designer的Advanced Setting中的Aggregation Groups区域完成.
5.3 RowKey优化
Kylin会把所有的维度按照顺序组合成一个完整的Rowkey,并且按照这个Rowkey升序排列Cuboid中所有的行。
设计良好的Rowkey将更有效地完成数据的查询过滤和定位,减少IO次数,提高查询速度,维度在rowkey中的次序,对查询性能有显著的影响。
设计原则:
①被用作where过滤的维度放在前边
②基数大的维度放在基数小的维度前边
5.4 并发粒度参数优化
构建引擎根据Segment估计的大小,以及参数“kylin.hbase.region.cut”的设置决定Segment在存储引擎中总共需要几个分区来存储,如果存储引擎是HBase,那么分区的数量就对应于HBase中的Region数量。kylin.hbase.region.cut的默认值是5.0,单位是GB,也就是说对于一个大小估计是50GB的Segment,构建引擎会给它分配10个分区。
用户还可以通过设置kylin.hbase.region.count.min(默认为1)和kylin.hbase.region.count.max(默认为500)两个配置来决定每个Segment最少或最多被划分成多少个分区。