Overview
Kylin的使命是超高速的大数据OLAP(Online Analytical Processing),也就是要让大数据分析像使用数据库一样简单迅速,用户的查询请求可以在秒内返回。其中的关键就是打破查询时间随着数据量成线性增长的这个规律。解决方案是针对维度聚合的预计算,因为由于业务范围和分析需求是有限的,有意义的维度组合也是相对有限的,一般不会随着数据的膨胀而增长。传统的Hadoop生态提供了大规模并行处理和列式存储两大关键技术,预计算是Kylin提供的第三大关键技术。
Concept
- MOLAP(Multidimensional Online Analytical Processing)Cube 多维立方体分析
- Dimension and Measure(维度和度量)
维度是观察数据的角度,度量是被聚合的统计值
- Cube and Cuboid
N个维度,组合的可能性共有2^N种;对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为
Cuboid
;所有维度组合的Cuboid
作为一个整体,被称为Cube
。一个Cube
就是许多按维度聚合的物化视图的集合。
Process
Kylin的工作原理就是对数据模型做Cube
预计算,并利用计算的结果加速查询:
- 指定数据模型,定义维度和度量
- 预计算Cube,计算所有Cuboid并保存为物化视图
- 执行查询时,读取Cuboid,运算,产生查询结果
Kylin提高性能的本质是在原始记录和结果数据之间设置了一个中间层;
理论上,Kylin可以支撑的数据集大小没有上限,仅受限于存储系统和分布式计算系统的承载能力,并且查询速度不会随着数据集的增大而缓慢。Kylin在数据集规模上的局限性主要在于维度的个数和基数。它们一般由数据模型决定,不会随着数据量的增大而增大。
Architecture
Kylin 系统可以分为在线查询和离线构建两大部分
- 离线构建:首先从数据源(
Hive
或HDFS
)抽取数据,通过MapReduce
构建Cube
,将Cube
存储在存储引擎中,一般是HBase
。 - 在线查询:Kylin提供了
Rest API
和JDBC/ODBC
查询接口,二者最终会进入Rest
服务层,Rest
服务层再转交给查询引擎进行处理。
查询引擎会将基于关系表的逻辑执行计划翻译成为基于Cube的物理执行计划,然后查询预计算生成的Cube并产生结果。
路由选择在最初设计的时候,曾考虑将Kylin不能执行的查询引导去Hive中执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,体验非常糟糕,后来这个功能在发行版中默认关闭。
Kylin1.5将数据源、构建引擎、存储引擎三大依赖抽象为接口,而Hive,MapReduce,HBase只是默认实现。