OLAP引擎Kylin——工作原理

  |   0 评论   |   3,817 浏览

Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc.开发并贡献至开源社区。

背景知识

事实表与维度表

Kylin中维度表的设计

除了数据模型以外,Kylin还对维度表有一定的要求

要具有数据一致性,主键值必须是唯一的;Kylin会进行检查,如果有两行的主键值相同则会报错。

维度表越小越好,因为Kylin会将维度表加载到内存中供查询;过大的表不适合作为维度表,默认的阈值是300MB。

改变频率低,Kylin会在每次构建中试图重用维度表的快照,如果维度表经常改变的话,重用就会失效,这就会导致要经常对维度表创建快照。

维度表最好不要是Hive视图(View),虽然在Kylin1.5.3中加入了对维度表是视图这种情况的支持,但每次都需要将视图进行物化,从而导致额外的时间开销。

星形模型与雪花模型

OLAP与OLTP

OLAP的基本操作

Cube、 Cuboid和Cube Segment

体系架构

超大规模数据分析,无需编码

image.png

Kylin的系统架构

Hadoop/Hive/Kafka/RDBMS(图中左下角部分)

Kylin是一个MLOAP系统,其将Hive/Kafka中的数据进行预计算

由于Kylin采用的是星形模式,也就是只支持一张事实表

HBase

Kylin使用HBase来存储OLAP分析用的Cube数据,实现多维数据集的交互式查询

Kylin的核心模块

REST Server

REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。 此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。 另外可以通过Restful接口实现SQL查询。

查询引擎(Query Engine)

当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。  

在Kylin当中,我们使用一套名为Apache Calcite的开源动态数据管理框架对代码内的SQL以及其它插入内容进行解析。(Calcite最初被命名为Optiq,由Julian Hyde所编写,但如今已经成为Apache孵化器项目之一。) 

Routing

负责将解析的SQL生成的执行计划转换成cube缓存的查询,cube是通过预计算缓存在hbase中,这部分查询可以在秒级设置毫秒级完成,而且还有一些操作使用过的查询原始数据(存储在Hadoop的hdfs中通过hive查询)。这部分查询延迟较高。

元数据管理工具(Metadata Manager)

Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据。其它全部组件的正常运作都需以元数据管理工具为基础。 Kylin的元数据存储在hbase中。

任务引擎(Cube Build Engine)

这套引擎的设计目的在于处理所有离线任务,其中包括shell脚本、Java API以及Map Reduce任务等等。任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决其间出现的故障。

Kylin提供的接口

主要是Restful API和JDBC/ODBC接口,方便第三方SQL工具的接入

技术原理

image.png理论基础

空间换时间

image.png

O(1) vs O(n)

image.png

Cube的构建

算法参考《OLAP引擎Kylin——Cube构建算法


读后有收获可以支付宝请作者喝咖啡