kylin技术栈

维度优化

Posted by john on April 10, 2019

Apache Kylin介绍

Apache kylin(Extreme OLAP Engine for Big Data)是一个开源的分布式分析引擎,为Hadoop等大型分布式数据平台的超大规模数据集通过标准SQL查询及多维分析(OLAP)功能,提供亚秒级的交互式分析能力。

kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成预计算结果的查询(空间换时间),这决定了Kylin能够拥有很好的快速查询和高并发能力。

为什么需要维度优化

因为如果不进行任何维度优化,直接将所有的维度放到一个聚集组里,Kylin就会计算所有的维度组合(cuboid)。比如,有12个维度,Kylin就会计算2的12次方即4096个cuboid,实际上查询可能用到的cuboid不到1000个,甚至更少。如果对维度不进行优化,会造成集群计算和存储资源的浪费,也会影响cube的build时间和查询时间,所以我们需要进行cube的维度优化。

如何进行维度优化

首先请确认你设置的cube维度是你查询会使用到的

目前Kylin可以使用到的维度优化手段有以下几种:

  • 聚合组
  • 衍生维度
  • 强制维度
  • 层次维度
  • 联合维度
  • Extended Column

Apache kylin的核心概念

  1. 表(Table): 表定义在hive中,是数据立方体的数据源,在build cube之前必须同步在kylin中。
  2. 模型(model): 模型描述了一个星型模式的数据结构,定义了一个事实表和多个查找表的连接和过滤关系。
  3. 立方体(cube): 它定义了使用的模型、模型中的表的维度、度量(measure,一般指聚合函数,如:sum、count、average等)、如何对段分区(segments partition)合并段、(segments auto-merge)等的规则。
  4. 立方体段(Cube Segment): 它是立方体构建(build)后的数据载体,一个 segment 映射hbase中的一张表,立方体实例构建(build)后,会产生一个新的segment,一旦某个已经构建的立方体的原始数据发生变化,只需刷新(fresh)变化的时间段所关联的segment即可
  5. 作业(Job): 对立方体实例发出构建(build)请求后,会产生一个作业。该作业记录了立方体实例build时的每一步任务信息。作业的状态信息反映构建立方体实例的结果信息。

Apache kylin的工作机制

Apache kylin能提供低延迟的秘诀就是预计算,即针对一个星型拓扑机构的数据立方体,预计算多个维度组合的度量,然后将结果保存在hbase中,对外暴露JDBC、ODBC、Rest API的查询接口,即可实现实时查询。