Kylin的概述

以下内容均摘录自《Apache Kylin权威指南》
自从Hadoop诞生以来,大数据的存储和批处理均得到了有效的解决,而如何高速的分析数据就成了下一个挑战。于是各式各样的“SQL on Hadoop”技术应运而生,其中以Hive为代表,Impala、Presto、Phoenix、Drill、SparkSQL等紧随其后。它们的主要技术是“大规模并行处理”(Massive Parallel Processing,MPP)和“列式存储”(Columnar Storage)。
大规模并行处理可以调动多台机器一起进行并行计算,用线性增加的资源来换取计算时间的线性下降。列式存储则将记录按列存放,这样做不仅可以在访问时只读取需要的列,还可以利用存储设备擅长连续读取的特点,大大提高读取的速率。这两项关键技术使得Hadoop上的SQL查询速度从小时提高到了分钟。
然而分钟级别的查询响应仍然离交互式分析的现实需求还很远。这是因为大规模并行处理和列式存储虽然提高了计算和存储的速度,但并没有改变查询问题本身的时间复杂度,也没有改变查询时间与数据量成线性增长的关系这一事实。当然,可以用很多的优化技术缩短查询的时间,比如更快的存储、更高效的压缩算法,等等,但总体来说,查询性能与数据量呈线性相关这一点是无法改变的。虽然大规模并行处理允许十倍或百倍地扩张计算集群,以期望保持分钟级别的查询速度,但购买和部署十倍或百倍的计算集群又怎能轻易做到,更何况还有高昂的硬件运维成本。

Kylin能够解决什么样的问题

Apache Kylin的初衷就是要解决千亿条、万亿条记录的秒级查询问题,其中的关键就是要打破查询时间随着数据量成线性增长的这个规律。仔细思考大数据OLAP,可以注意到两个事实。
(1)大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值。原始的记录则不是必需的,或者访问频率和概率都极低。
(2)聚合是按维度进行的,由于业务范围和分析需求是有限的,有意义的维度聚合组合也是相对有限的,一般不会随着数据的膨胀而增长。
基于以上两点,我们可以得到一个新的思路——“预计算”。应尽量多地预先计算聚合结果,在查询时刻应尽量使用预算的结果得出查询结果,从而避免直接扫描可能无限增长的原始记录。

Kylin实现亚秒级查询的方式

Apache Kylin通过空间换时间的方式,实现在亚秒级别延迟的情况下,对Hadoop上的大规模数据集进行交互式查询;Kylin沿用了原来数据仓库技术中的Cube概念,把无限数据按有限的维度进行“预处理”,然后将结果(Cube)加载到HBase里,原有的基于行的关系模型被转换成基于键值对的列式存储;通过维度组合作为HBase的Rowkey,在查询访问时不再需要昂贵的表扫描,这为高速高并发分析带来了可能;Kylin提供了标准SQL查询接口,支持大多数的SQL函数,同时也支持ODBC/JDBC的方式和主流的BI产品无缝集成。
Kylin在Hadoop上提供了标准的、友好的SQL接口,外加查询速度非常迅速,原本要用几分钟的查询现在几秒钟就能返回结果,BI分析的工作效率得到了几百倍的提升。

Kylin知识点

维度(Dimension):维度一般是一组离散的值,比如时间维度上的每一个独立的日期,或者商品维度上的每一件独立的商品。因此统计时可以把维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、去重复计数等聚合计算。
度量(Measure):度量就是被聚合的统计值,也是聚合运算的结果,它一般是连续的值,如销售额。
Cuboid:给定一个数据模型,我们可以对其上的所有维度进行组合。对于N个维度来说,组合的所有可能性共有2^N 种。对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为Cuboid。
Cube:所有维度组合的Cuboid作为一个整体,被称为Cube。所以简单来说,一个Cube就是许多按维度聚合的物化视图的集合。
Cube Segment是指针对源数据中的某一个片段,计算出来的Cube数据。

数据挖掘有几种常见的多维数据模型,如星形模型(Star Schema)、雪花模型(Snowflake Schema)、事实星座模型(Fact Constellation)等。
星形模型:星形模型中有一张事实表,以及零个或多个维度表;事实表与维度表通过主键外键相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,故取名为星形模型。
雪花模型:如果将星形模型中某些维度的表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联,那么这种模型称为雪花模型。
Kylin只支持星形模型的原因如下:
(1)雪花模型与星形模型的主要不同在于:雪花模型的维表可能是规范化形势,以便减少冗余。这种表易于维护,并且节省存储空间。然而,与巨大的事实表相比,这种空间的节省可以忽略。
(2)其他模型可以通过一定的转换,变为星形模型。
(3)星形模型是最简单,也是最常用的模型。由于星形模型只有一张大表,因此它相比于其他模型更适合于大数据处理。

参考文献:Apache Kylin权威指南

你可能感兴趣的:(学习笔记)