首页 > 技术文章 > Apache Kylin

beautycode 2019-12-10 11:15 原文

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 系统可以分为在线查询离线构建两大部分

  • 离线构建:首先从数据源(HiveHDFS)抽取数据,通过MapReduce构建Cube,将Cube存储在存储引擎中,一般是HBase
  • 在线查询:Kylin提供了Rest APIJDBC/ODBC查询接口,二者最终会进入Rest服务层,Rest服务层再转交给查询引擎进行处理。

查询引擎会将基于关系表的逻辑执行计划翻译成为基于Cube的物理执行计划,然后查询预计算生成的Cube并产生结果。
路由选择在最初设计的时候,曾考虑将Kylin不能执行的查询引导去Hive中执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,体验非常糟糕,后来这个功能在发行版中默认关闭。
Kylin1.5将数据源、构建引擎、存储引擎三大依赖抽象为接口,而Hive,MapReduce,HBase只是默认实现。

推荐阅读