Apache kylin 原理和架构

时间:2024-03-25 11:15:49

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

1.基本原理

kylin的核心思想是预计算,理论基础是:以空间换时间。即多多维分析可能用到的度量进行预计算,将计算好的结果保存成Cube并存储到hbase中,供查询时直接访问。把高复杂度的聚合运算,多表连接等操作转换成对预计算结果的查询。

基本概念:

  • Cuboid: Kylin中将维度任意组合成为一个Cuboid。
  • Cube: Kylin中将所有维度组合成为一个Cube,即包含所有的Cuboid。

Apache kylin 原理和架构

为了刚好的适应大数据环境,Kylin通常从用来做数据仓库的hive中读取源数据,使用mapreduce作为cube构建引擎,把预计算结果保存到Hbase中,对外暴露Restful API/JDBC/ODBC的查询接口。因为Kylin支持标出你的ANSI SQL,所以可以和常用数据分析工具(如Tableau,Excel等)进行无缝对接。

2.Kylin架构

Apache kylin 原理和架构

Kylin核心模块:

1)REST Server: 

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

2)查询引擎(Query Engine):

当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。  
在Kylin当中,我们使用一套名为Apache Calcite的开源动态数据管理框架对代码内的SQL以及其它插入内容进行解析。(Calcite最初被命名为Optiq,由Julian Hyde所编写,但如今已经成为Apache孵化器项目之一。) 

3)Routing

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

4)元数据管理工具(Metadata Manager)

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

5)任务引擎(Cube Build Engine):

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

这套引擎负责管理底层存储——特别是cuboid,其以键-值对的形式进行保存。存储引擎使用的是HBase——这是目前Hadoop生态系统当中最理想的键-值系统使用方案。Kylin还能够通过扩展实现对其它键-值系统的支持,例如Redis。  

7) ODBC驱动程序

为了支持第三方工具与应用程序——例如Tableau——我们构建起了一套ODBC驱动程序并对其进行了开源。我们的目标是让用户能够更为顺畅地采用这套Kylin平台。  


Kylin是一个MOLAP分析系统,建模时候只支持一张事实表,多张维表,如果业务需求复杂,考虑在hive中进行进一步处理,比如生成一张大的宽表或者采用view代替。