大数据基础---Kylin是什么?

一.Kylin是什么?

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

Apache Kylin™ 令使用者仅需三步,即可实现超大数据集上的亚秒级查询。

1.定义一个星形或雪花形数据模型

2.在定义的表上创建cube

3.使用标准的SQL通过ODBC,JDBC和Restful API即可在亚秒内查询到结果。

二.解决问题

任何技术的出现都不是偶然,往往都是应需求而生,Kylin也不例外。Kylin直接面对的问题,是针对大数据不同维度频繁查询问题,比如拉钩网,我们切换一个城市,它就要把当前城市的所有岗位显示出来,利用普通的Hive根本没法做到实时响应,所以就发明了Kylin。Kylin不仅仅提高了查询性能,而且大大降低了对硬件的要求。

三.OLTP与OLAP

数据处理可以大致分为两类:联机事务处理OLTP,联机分析处理OLAP。

3.1 OLTP

OLTP(On-Line Transaction Processing):联机事务处理,OLTP 是传统的关系型数据库的主要应用, 主要是基本的、日常的事务处理,例如银行交易。主要用于业务类系统,主要供基层人员使用,进行一线业务操作。OLTP 表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的 Transaction 以及 Execute SQL的数量。在这样的系统中,单个数据库每秒处理的 Transaction 往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的 OLTP 系统有电子商务系统、银行、证券等,如美国 eBay 的业务数据库,就是很典型的 OLTP 数据库。

3.2 OLAP

OLAP(On-Line Analytical Processing):联机分析处理,OLAP 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。OLAP 数据分析的目标是探索并挖掘数据价值,作为企业高层进行决策的参考。OLAP 分析处理是一种共享多维信息的快速分析技术;OLAP 利用多维数据库技术使用户从不同角度观察数据;OLAP 用于支持复杂的分析操作,侧重于对管理人员的决策支持,可以满足分析人员快速、灵活地进行大数据量的复杂查询的要求,并且以一种直观、易懂的形式呈现查询结果,辅助决策。

3.2.1 OLAP基本概念:

变量:度量的具体的值。比如身高,体重的值。

维度:不同的角度,比如身高,收入,家庭成员。

事实:组合维度求得的值,也就是 维度+变量组合。

3.2.2 OLAP基本操作:

钻取(Drill-down ):在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分到更细节的数据,比如通过对第二季度的总销售数据进行钻取来查看第二季度 4、5、6 每个月的消费数据。
上卷(Roll-up ):钻取的逆操作,即从细粒度数据向高层的聚合,如将江苏省、上海市和浙江省的销售数据进行汇总来查看江浙沪地区的销售数据。
切片(Slice ):选择维中特定的值进行分析,比如只选择电子产品的销售数据,或者第二季度的数据。
切块(Dice ):选择维中特定区间的数据或者某批特定值进行分析,比如选择第一季度到第二季度的销售数据,或者是电子产品和日用品的销售数据。
旋转(Pivot ):即维的位置的互换,就像是二维表的行列转换,如图中通过旋转实现产品维和地域维的互换。

3.2.3 OLTP和OLAP的关系

OLTP主要是企业给用户用的产品,OLAP是分析用户的行为,帮助企业决策,调整方向。

四.Kylin实现原理

kylin 的核心思想是预计算,kylin 对多维分析可能用到的度量进行预计算,将高维复杂的聚合计算,多表连接等操作转换成预计算结果,将计算好的结果保存成 Cube,存储于 Hbase 中,供查询时直接访问。预计算过程需要很长时间,但是一旦结果计算出来,再次查询只是获取结果集合的过程,不需要额外再次浪费集群资源进行长时间查询,这种以空间换取时间的处理数据模式决定了 Kylin 拥有很好的快速查询、高并发能力。

Kylin 是一个 MOLAP(多维联机数据分析)系统,最常用的是将 Hive 中的数据进行预计算,利用 Hadoop 的 Mapreduce 或者 Spark 分布式计算框架来实现。Kylin 获取的数据表是星型数据结构的,目前建模时,只支持一张事实表,多张维度表,假设业务需求比较复杂,可以考虑在 Hive 中进行预处理生成一张宽表来处理。
对于 Hive 中的维度表和事实表,根据我们指定的维度列来构建 cube,cube 是所有维度的组合,任一维度的组合称为 cuboid,即:cube 中包含所有的 cubeid。理论上来说,一个 N 维的 cube,会有 2 的 N 次方种维度组合(cuboid)。举例:假设一个 cube 包含 time、country、city、location 四个维度,那么就有 16 中 cuboid 组合。通过计算框架的计算将 OLAP 分析的 cube 数据存储在 Hbase 中,方便后期实现多维数据集的交互式快速查询。

上图中是 Kylin 整体架构原理图,其中:
REST Server:提供 Restful 接口,可以通过此接口来创建、构建、刷新、合并Cube 等相关操作。同时也可以通过 Restful 接口实现 SQL 查询。
Query Engine:目前 Kylin 使用开源的 Calcite 框架来实现 SQL 解析,用户发出SQL 查询之后,可以通过 Query Engine 来将 SQL Query 语句转换成 SQL 语法树,也就是逻辑计划。

Routing:负责将解析 SQL 生成的执行计划转换成 cube 缓存的查询,cube 是通过预计算缓存在 Hbase 中,这部分查询时可以在秒级甚至是毫秒级完成,除此之外,还有一些操作需要使用原始数据(存储在 HDFS 上)通过 Hive 查询,这部分查询的延迟比较高。
Metadata:Kylin 中有大量的元数据信息,包括 cube 的定义、星型模型的定义、job 和执行 job 的输出信息、模型的维度信息等等。Kylin 的元数据存储在 Hbase 中,存储的格式是 Json 字符串。
Cube Build Engine:立方体构建模块是所有模块的基础,主要负责 Kylin 预计算中创建 cube,创建的过程是首先通过 Hive 读取原始数据,然后通过 MR 或者 Spark 计算生成 Htable,最后将数据加载到 Hbase 表中。

系列传送门

posted @ 2020-05-19 23:34  数据驱动  阅读(1958)  评论(0编辑  收藏  举报