Skip to content

初识Kylin

1. Kylin简介

Kylin由eBay公司开发,使用神兽麒麟(Kylin)为名,是一个免费开源的OLAP多维数据分析引擎。它能在亚秒内查询巨大的Hive表。

2. Kylin架构

Alt text

2.1 REST Server

REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。另外可以通过Restful接口实现SQL查询。

2.2 查询引擎(Query Engine)

当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。Kylin4.0将Spark作为查询引擎。

2.3 路由器(Routing)

在最初设计时曾考虑过将Kylin不能执行的查询引导去Hive中继续执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。最后这个路由功能在发行版中默认关闭。

2.4 元数据管理工具(Metadata)

Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据。其它全部组件的正常运作都需以元数据管理工具为基础。Kylin的元数据存储在MySQL中。

2.5 任务引擎(Cube Build Engine)

Kylin4.0的构建引擎从MR替换为Spark,速度更快。使用户能够快速得到想要的Cube数据。构建引擎最终得到的数据存放到Parquet文件当中,然后让用户可以更好的使用SparkSQL查询引擎去读取Cube数据。

3. Kylin特点

Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。

  1. 标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。
  2. 支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。
  3. 亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
  4. 可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。
  5. BI工具集成
    Kylin可以与现有的 BI工具集成,具体包括如下内容:
    • ODBC:与Tableau、Excel、PowerBI等工具集成
    • JDBC:与Saiku、BIRT等 Java工具集成
    • RestAPI:与JavaScript、Web网页集成
    • Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。

4. Kylin4.0升级

4.1 存储引擎

Kylin3.0是使用Hbase作为存储结构的,因此我们可以称为是Kylin on Hbase。而Kylin 4.0完全砍掉了Hbase,底层使用Parquet存储文件,因此可以称为Kylin on Parquet。首先Kylin on HBase的Cuboid的数据是存放在HBase的表里,一个Segment对应了一张HBase表,查询下压的工作由HBase协理器处理,因为HBase不是真正的列存并且对OLAP而言吞吐量不高。Kylin4将HBase替换为Parquet,也就是把所有的数据按照文件存储,每个Segment会存在一个对应的HDFS的目录,所有的查询、构建都是直接通过读写文件的方式,不用再经过HBase。虽然对于小查询的性能会有一定损失,但对于复杂查询带来的提升是更可观的、更值得的。

4.2 构建引擎

Kylin Cube的构建引擎,在Kylin3.0中,一般都会使用MR作为Cube构建引擎去逐层构建Cube,速度较慢。而在Kylin4.0中,将构建引擎换成了特定优化的Spark 引擎,步骤也减少为了两大步,第一步进行资源探测,收集构建Cube所需要的元数据信息。第二步使用Spark引擎去计算和构建,有效的提升了Cube构建速度。

4.3 查询引擎

Kylin3.0的查询完全依托于Calcite引擎和HBase的协处理器,这就导致当数据从HBase读取后,如果想做聚合、排序等,就会局限于QueryServer单点的瓶颈,而 Kylin4则转换为基于Spark SQL的DataFrame作为查询引擎,得益于Spark的分布式查询机制,Kylin4.0的查询速度也有了不少的改善。