Apache Kylin(一)

文章摘自《Apache Kylin 权威指南》

一、概述 

Apache Kylin 是Hadoop大数据平台上的一个开源的联机分析处理(OLAP)引擎。它采用多维立方体预计算技术,将大数据的SQL查询速度从之前的分钟乃至小时级别提升到亚秒级别,这种百倍、千倍的数据提升,为超大规模数据集上的交互式大数据分析奠定了基础。

二、Apache Kylin的使命

    Apache Kylin的使命是实现超高速的大数据OLAP分析,也就是要让大数据分析像使用数据库一样简单迅速,用户的查询请求可以在秒级返回,交互式数据分析以前所未有的速度释放大数据里潜藏的知识和信息,以使我们在面对未来的挑战时占得先机。

三、为什么要使用Apache Kylin?

    自2006年Hadoop诞生以来,大数据的存储和批处理问题得到了妥善解决,而如何高速地分析数据也就成为下一个挑战。于是各种“SQL-on-Hadoop”技术应用而生,其中以Hive为代表,Impala、Presto、Phoenix、Drill、Spark SQL 等紧随其后,他们的主要技术是“大规模平行处理(MPP)”和“列式存储”。

    大规模并行处理可以调动多台机器进行并行计算,用线性增加资源来换取计算时间的线性下降。列式存储则将记录按列存放,不仅在访问时可以只读取需要的列,更可以利用存储设备擅长连续读取的特点,大大提升读取的速率。这两关键技术使得Hadoop上的SQL查询速度从小时提高到了分钟级。

    然而分钟级别的查询响应仍然与交互式分析的实现需求相差很远。分析师敲入查询指令,按下回车键后,需要去倒杯咖啡,静静地等待结果。得到结果后才能根据情况调整查询,再做下一轮分析。如此反复,一个具体场景分析常常需要几个小时甚至几天才完成,数据分析效率低下。

    这是因为大规模并行处理和列式存储虽然提高了计算和存储的速度,但并没有改变查询问题本身的时间复杂度,也没有改变查询时间与数量级呈线性增长的关系这一事实。假设查询1亿条记录耗时1分钟,那么查询10亿条记录就需要10分钟,查询100亿条就至少需要1小时40分钟。

    当然有很多优化技术可以缩短查询的时间,比如更快的存储、更高效的压缩算法等,但总体来说,查询性能与数据量呈线性相关这一事实无法改变。虽然大规模并行处理允许十倍或者百倍地扩张计算集群,以保持分钟级别的查询速度,但购买和部署十倍、百倍的计算集群又很难做到,更何况还需要高昂的硬件运维技术。

    另外,对于分析师来说,完备的、经过验证的数据模型比分析性能更加重要,直接访问纷繁复杂的原始数据并进行相关分析其实并不是很美好的体验,特别是在超大规模数据集上,分析师们把更多的精力花费在了等待查询结果上,而不是用在更加重要的建立领域模型上。

四、那么Kylin是如何解决关键问题的呢?

    Apache Kylin 的初衷就是解决千亿、万亿条记录的秒级查询问题,其中的关键就是打破查询时间随着数据量呈线性增长的这一规律。结合大数据Olap场景,可以得出两个事实:1⃣️大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值。原始的记录则不是必需的,或者被访问的频率和概率极低。2⃣️聚合是按照维度进行的,而维度的聚合可能性是有限的,一般不随数据的膨胀而线性增长。基于以上两点得出新思路—“预计算”。

五、Kylin的工作原理

 

    Kylin的工作原理本质上是MOLAP Cube,也就是多维立方体分析。

    维度:观察数据的角度。一般是一组离散的值。

    度量:被聚合的统计值。一般是连续值。

    给定一个数据模型,可以对其上所有维度进行组合。对于N个维度来说,所有组合的可能性又2的N次方种。对每一种维度的组合,将度量做聚合运算,运算的结果保存为一个物化视图,称为Cuboid。将所有维度组合的Cuboid作为一个整体,被称为Cube。简单来说,一个Cube就是许多按照维度聚合的物化视图的集合。

    kylin的工作原理就是对数据模型做Cube预计算,并利用计算的结果加速查询。过程如下:

1⃣️指定数据模型,定义维度和度量。

2⃣️预计算Cube,计算所有Cuboid并将其保存为物化视图。

3⃣️执行查询时,读取Cuboid,进行加工运算产生查询结果。

    由于kylin的查询过程不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算,并利用预计算的结果来执行查询,因此其速度比非预计算的查询技术一般要快一个到两个数量级。并且在超大数据集上其优势更明显。当数据集达到千亿乃至万亿级别时,kylin的数据甚至可以超越其他非预计算技术1000倍以上。

六、Kylin的主要特点

1、标准SQL接口

2、支持超大数据集

3、亚秒级响应

    预计算,带来了优异的查询响应速度。案例 对1000多亿条数据构建了立方体,90%的查询性能在1.18s以内。

4、可伸缩性和高吞吐率

    一个Kylin实例中,可以每秒处理近70个查询,已经远远高于每秒20个查询的一般水平。

5、BI及可视化工具集成

七、与其他开源产品的比较

   Apache kylin与 Apache Drill、Apache Impala、Druid、Hive、Presto、SparkSQL进行比较:

从底层技术的角度来看,这些开源产品有很大的共性,一些底层技术几乎被所有的产品一致采用。

[]大规模平行处理(MPP): 可以通过增加机器的方式来扩容处理速度,在相同的时间内处理更多的数据。

[]列式存储:通过按列存储提高单位时间内数据的I/O吞吐率,还能跳过不需要访问的列。

[]索引:利用索引配合查询条件,可以迅速跳过不符合查询条件的数据块,仅扫描需要扫描的数据内容。

[]压缩:压缩数据然后存储,使得存储的密度更高,在有限的I/O速率下,在单位时间内读取更多的记录。

    可以看到,所有的这些方法都只是提高了单位时间内计算机处理数据的能力,当大家都采用这些技术时,彼此之间的区别将只停留在实现层面的代码上。重要的是,这些技术都不会改变一个事实,那就是处理时间与数据量之间的正比例关系。

    当数据量翻倍,在不扩容的前提下,MPP需要两倍的时间来完成计算;列式存储需要两倍的存储空间;索引下符合条件的记录数也会翻倍;压缩后的数据大小也是之前压缩后的两倍。因此,查询速度也会随之变成之前的一半。当数据量十倍百倍地增加时,这些技术的查询速度就会十倍百倍的下降,最终无法完成查询。

    Kylin的特色在于,在上述底层技术之外,另辟蹊径地使用了独特的Cube预计算技术。预计算事先将数据按维度组合进行了聚合,将结果保存为物化视图。经过聚合,物化视图的规模就只由维度的基数决定,而不再随数据的增加呈线性增长。理论上它可以在任意大的数据规模上达到O(1)常数级别的查询速度,而其他如大规模并行计算和列式存储的查询速度都在O(N)级别,与数据规模呈线性关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值