1 概述
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark智商的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。
注:OLAP(Online Analytical Process),联机分析处理或在线分析。
最初由eBay开发并贡献至开发社区,它能在亚秒内查询巨大的hive表。Kylin也是由中国人主导的、唯一的Apache顶级开源项目,在开源社区有世界级的影响力。
1.1 Kylin特点
1.1.1 大数据OLAP的两个事实
(1)大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值。原始的记录则不是必须的,或者访问频率和概率都极低。
(2)聚合是按维度进行的,由于业务范围和分析需求是有限的,有意义的维度聚合组合也是相对有限的,一般不会随着数据的膨胀而增长。
Kylin基于以上两点,得到一个新的思路——预计算。应尽量多地预先计算聚合结果,在查询时刻应尽量使用预算的结果得出查询结果,从而避免直接扫描可能无限增长的原始记录。
1.1.2 Kylin特点
Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率和BI工具集成等。
(1)可扩展超快OLAP引擎Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而设计。
(2)Hadoop ANSI SQL接口Kylin为Hadoop提供标准SQL支持大部分查询功能。
(3)交互式查询能力通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能。
(4)多维立方体(MOLAP Cube)用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体。
(5)与BI工具无缝整合Kylin提供与BI工具的整合能力,如Tableau、PowerBI/Excel、MSTR、QlikSense、Hue和SuperSet。
1.2 Kylin工作原理
Kylin的工作原理本质上是MOLAP(Multidimensional Online Analytical Processing)Cube,即多维立方体分析。
这是数据分析中相当经典的理论,在关系数据库年代就已经有了广泛的应用。
在说明MOLAP Cube之前需要先介绍一下维度(Dimension)和度量(Measure)这两个概念。
1.2.1 维度(Dimension)和度量(Measure)简介
(1)维度
简单来讲,维度就是观察数据的角度。它通常是数据记录的一个属性,例如时间和地点等。
比如电商的销售数据,可以从时间的维度来观察,也可以进一步细化,从时间和地区的维度来观察。
维度一般是一组离散的值,比如时间维度上的每一个独立的日期,或者商品维度上的每一件独立的商品。
因此统计时可以把维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、去重技术等聚合操作
(2)度量
度量就是被聚合后的统计值,也就是聚合运算的结果,如图中的销售额,或者是销售商品的总件数。
度量是基于数据所计算出来的考量值;它通常是一个数值,如总销售额、不同的用户数等。
通过比较和测算度量,分析师可以对数据进行评估,比如今年的销售额相比去年有多大的增长,增长的速度是否达到预期,不同商品类别的增长比例是否合理等。
在一个SQL查询中,Group By的属性通常就是维度,而计算出的值则是度量。
1.2.2 Cube和Cuboid
有了维度和度量,一个数据表或数据模型上的所有子弹就可以分类了,它们要么是维度,要么是度量(可以被聚合)。于是就有了根据维度和度量做预计算的Cube理论。
给定一个数据模型,我们可以对其上的所有维度进行组合。对于N个维度来说,组合的所有可能性共有2^n种。
对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为Cuboid。
所有维度组合的Cuboid作为一个整体,被称为Cube。
所以简单来说,一个Cube就是许多按维度聚合的物化视图的集合。
下面来列举一个具体的例子:
假定有一个电商的销售数据集,其中维度包括:时间(Time)、商品(Item)、地点(Location)和供应商(Supplier),度量包括:销售额(GMV)。
那么所有维度的组合就有2^4=16种。
(1)一维度(1D)的组合有[Time]、[Item]、[Location]和[Supplier]4种;
(2)二维度(2D)的组合有[Time,Item]、[Time,Location]、[Time、Supplier]、 [Item,Location]、[Item,Supplier]、[Location,Supplier]6种;
(3)三维度(3D)的组合也有4种;
(4)最后零维度(0D)和四维度(4D)的组合各有1种。
计算Cuboid,即按维度来聚合销售额。如果用SQL语句来表达计算Cuboid[Time,Loca-tion],那么SQL语句如下:
SELECT Time,Location,Sum(GMV) as GMV FROM Sales GROUP BY Time,Location;
将计算的结果保存为物化视图,所有Cuboid物化视图的总称为Cube。
1.2.3 工作原理
Kylin的工作原理就是