秒级SQL多维分析引擎——Apache Kylin

0 术语

略。基本可以从wikipedia上找到解释。

http://kylin.incubator.apache.org/docs/gettingstarted/terminology.html

1 架构简介

在介绍Kylin的各种操作之前,首先让我们来了解一下Kylin的总体设计,包括其架构、工作流程、和数据模型。

1.1 架构

Kylin目前是一个MOLAP系统,也就是基于对Cube进行预计算来满足低延迟的查询处理。Kylin的数据源就是Hive上的表,以星型模式存在。Kylin的离线计算过程(下图中蓝色箭头的数据流)会读取Hive中的原始数据,将事实表和维表join起来,然后对各种维度组合(cuboid)进行计算。计算后的cube以key-value的形式存储在HBase中。

对于SQL请求,Kylin的查询引擎会判断SQL能否由HBase中的cube满足。如果可以,查询就会转换为HBase的range scan操作,直接获得结果数据,因此能做到秒级的响应。对于无法由cube实现的查询,Kylin可以将查询路由给Hive执行,不过当前版本由于性能原因,disable了路由查询的功能。

秒级SQL多维分析引擎——Apache Kylin

1.2 工作流程

使用Kylin的工作流程如下图所示。

秒级SQL多维分析引擎——Apache Kylin

首先,RD创建一个Kylin的项目。一个项目中可以定义多个Cube。

然后,RD需要告诉Kylin需要访问Hive上的哪些表,即「加载Hive表」。注意这里Kylin只会从Hive Metastore同步表的元信息,并不会读取表的数据。

之后就是最主要的「Cube建模」过程。这一步就是定义Cube的元信息,包括Data Model(指定事实表与维表,以及他们的连接方式)和Cube Model(有哪些维度和度量,如何增量刷新,以及聚集组和rowkey这些高级设置)。

建模完成之后,RD就可以出发「Cube构建」的动作了。Kylin提供了Cube构建管理的REST API,因此Cube的构建是可以与现有的调度系统集成的。

Cube构建成功之后,数据分析师就可以进行查询啦,例如进行常见的上卷下钻操作。下一小节会提到,Kylin中的Cube对分析师是透明的,分析师还是对Hive中的星型模式查询,这是Kylin区别于其他方案(例如生产aggr表和summary表)的主要特征。

1.3 数据模型

在Kylin系统内,不同角色人员看到的数据模型是不同的。下图说明了其中的区别。

秒级SQL多维分析引擎——Apache Kylin

  • 对于终端用户(即数据分析师),其看到的数据是在Hive中以星型模式组织起来的表,并且使用SQL对这些表进行分析。这些表可能在使用Kylin之前就存在于数据仓库之中了,也就是说,Kylin对于终端用户应该是“透明”的。但是在实际场景里,由于Hive和Kylin在SQL语法以及支持的查询类型等方面的区别,目前Kylin还无法做到完全的透明。不过Kylin在设计中是有「查询路由」模块的,该模块会把无法重写到HBase的查询路由给Hive执行,从而实现真正的透明。
  • 对于Cube建模人员,其任务是建立从Hive源表到HBase KV模型的映射。因此Cube建模人员接触的数据模型主要是Cube的元信息,包括标识事实表和维表、标识维度属性和度量属性(Aggregation)、以及定义HBase的rowkey等。
  • 最后,对于系统管理员,其面对的主要是物理数据模型,即存储系统的KV模型。

2 Cube建模

关于Cube建模的步骤和操作方式,目前官方教程已经比较全面了,故不再赘述。请读者自行阅读。

http://kylin.incubator.apache.org/docs/tutorial/create_cube.html


分享到:


相關文章: