什么是 Kylin
官网:http://kylin.apache.org/cn/
Apache Kylin 是 Hadoop/Spark 大数据平台上的一个开源的联机分析处理(OLAP)引擎
- Kylin 采用多维立方体预计算技术,实现了超高速的大数据 OLAP 分析,也就是要让大数据分析像使用数据库一样简单迅速,用户的查询请求可以在秒级返回,交互式数据分析以前所未有的速度释放大数据里潜藏的知识和信息
- Kylin 是第一个由中国人主导的 Apache 顶级开源项目,在国际开源社区具有极大的影响力。目前,全球已经有超过一千家企业将 Kylin 用于自身的关键业务分析
为何要用 Kylin
传统技术如 Hive、Spark SQL 等想要提高查询性能方法如下:
- 大规模并行处理(MPP)
- 列式存储
- 建索引
- 压缩
以上所有这些方法都只是提高了单位时间内计算机处理数据的能力,但是这些技术都不会改变一个事实,那就是查询时间与数据量之间成正比关系
当数据量翻倍,在不扩容的前提下,MPP、存储空间、索引文件和压缩文件都将翻倍,因此,查询时间也会翻倍,查询速度随之变为原来的一半。当数据量十倍百倍地增加时,查询速度就会十倍和百倍地降低,最终无法完成查询。
Kylin 预计算技术
大数据分析(OLAP)有两个事实,如下:
- 大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值。原始的记录则不是必需的,或者是被访问的频率和概率极低
- 聚合是按照维度进行的,而维度的聚合可能性是有限的,一般不随数据的膨胀而线性增长
Kylin 预计算技术就是尽量多地预先计算聚合结果,在查询时刻也尽量使用预计算的结果得出查询结果,从而避免直接扫描可能无限增长的原始记录
举例
查询10月1日销售额最高的商品
select item,sum(sell_amount) from sell_details
where sell_date="2021-10-01"
group by item
order by sum(sell_amount) desc
传统的方法需要扫描所有的记录,找到 10月1日的销售记录,然后按商品聚合销售额,然后排序返回。假如 10月1日有 1 亿条交易记录,那么查询必需读取并累计至少 1 亿条记录,且查询速度会随将来销售的增加而逐渐下降,如果日交易量提高至 2 亿条,那么查询执行的时间可能会增加 1 倍。
预计算的方法则是会事先按维度[sell_date,item] 计算 sum(sell_amount) 并将其存储下来,在查询时找到 10 月 1日的销售商品就可以直接排序返回了。
读取的记录数最大不超过维度[sell_date,item]的组合数。显然数字将远远小于实际的销售记录,比如10月1日的1亿条记录包含了100万种商品,那么预计算后就只有100万条记录了,是原来的百分之一。并且这些记录是已经按商品聚合的结果,省去了运行时的聚合运算,从未来的发展看,查询速度只会随日期和商品数目的增长而变化,与销售记录总数不再有直接联系。
假如销售记录提高一倍到2亿,但只要商品总数不变,那么预计算的结果记录总数就不会变,查询的速度也不会变。
预计算就是 Kylin 在大规模并行处理和列式存储之外,提供给大数据分析的第三个关键技术。
预计算是空间换时间,在空间不敏感、需求相对稳定的时候,性价比有很大的优势
Kylin 主要特点
-
支持标准 SQL 接口
SQL 是绝大多数分析人员最熟悉的工具,也是大多数应用程序使用的编程接口,标准 SQL 接口是 Kylin 能够快速推广的关键原因
-
支持超大数据集
因为 Kylin 使用 Cube 预计算技术,使 Kylin 可以支撑的数据集大小没有上限,仅受限于存储系统和分布式计算系统的承载能力,并且查询速度不会随数据集的增大而减慢
Kylin 在数据集规模上的局限性主要在于维度的个数和接数。它们一般由数据模型决定,不随数据规模的增加而线性增长,也就是 Kylin 对未来数据增长有着更强的适应能力
-
支持亚秒级响应
Kylin 有优异的查询响应速度,这得益于预计算,很多复杂的计算如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时所需的计算量,提高了查询响应的速度
-
可伸缩性和高吞吐率
这主要还是归功于预计算降低了查询时所需的计算总量,使 Kylin 可以在相同的硬件配置下承载更多的并发查询
-
BI及可视化工具集成
Kylin 提供了丰富的 API 与现有的 BI 工具集成,如 ODBC、JDBC、Rest API 等。另外,Kylin 核心团队也贡献了 Zeppelin 及 Superset 的插件等免费可视化工具来访问 Kylin