一、Kylin 定义
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的 Hive 表。
二、Kylin 架构
A、REST Server
是应用程序的入口点,为应用程序提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等。
B、查询引擎(Query Engine)
当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后与系统中的其它组件进行交互,从而向用户返回对应的结果。
C、路由层(Routing)
路由层先从数据储存层的Cubes进行查询,如果查询不到,则从数据源层Hive(查询引擎是Spark)进行查询。
D、元数据管理工具(Metadata)
用于Kylin的所有元数据进行管理,包括cube元数据,Kylin4.0 的元数据存储在 MySQL 中。
E、任务构建引擎(Cube Build Engine)
构建引擎最终得到的数据存放到Parquet文件当中。构建过程分为两大步,第一步进行资源探测,收集构建Cube所需要的元数据信息。第二步使用Spark引擎去计算和构建。
三、Kylin 特点
Kylin 的主要特点包括支持 SQL 接口、支持超大规模数据集、亚秒级响应、可伸缩性、
高吞吐率、BI 工具集成等。
A、标准 SQL 接口
Kylin 是以标准的 SQL 作为对外服务的接口。
B、支持超大数据集
Kylin 对于大数据的支撑能力可能是目前所有技术中最为领先的。早在 2015 年 eBay 的生产环境中就能支持百亿记录的秒级查询,之后的应用场景中又有了千亿记录秒级查询的案例。
C、亚秒级响应
Kylin 拥有优异的查询响应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
D、可伸缩性和高吞吐率
单节点 Kylin 可实现每秒 70 个查询,还可以结合 Zookeeper 分布式协调服务搭建 Kylin 集群,速度更快。
E、BI 工具集成
Kylin 可以与现有的 BI 工具集成,具体包括如下内容。
ODBC:与 Tableau、Excel、PowerBI 等工具集成
JDBC:与 Saiku、BIRT 等 Java 工具集成
RestAPI:与 JavaScript、Web 网页集成
Kylin 开发团队还贡献了 Zepplin 的插件,也可以使用 Zepplin 来访问 Kylin 服务。
四、Kylin4.0 升级
Apache Kylin4.0 是 Apache Kylin3.x 之后一次重大的版本更新,它采用了全新的 Spark 构建引擎和 Parquet 作为存储,同时使用 Spark 作为查询引擎。
首先介绍一下 Apache Kylin 4.0 的主要优势,Apache Kylin 4 是完全基于 Spark 去做构建和查询的,能够充分地利用 Spark 的并行化、向量化和全局动态代码生成等技术,去提高大数据场景下查询的效率。接下来我们从数据存储,构建引擎,查询引擎三方面来聊一聊 Kylin4.0 的升级。
A、数据存储
Apache Kylin 3.0 是使用 Hbase 作为存储结构的,因此我们可以称为是 Kylin on Hbase。 而 Apache Kylin 4.0 完全砍掉了 Hbase,底层使用 Parquet 存储文件,因此可以称为 Kylin on Parquet。
首先来看一下,Kylin on HBase 和 Kylin on Parquet 的对比。Kylin on HBase 的 Cuboid 的数据是存放在 HBase 的表里,一个 Segment 对应了一张 HBase 表,查询下压的工作由 HBase 协理器处理,因为 HBase 不是真正的列存并且对 OLAP 而言吞吐量不高。Kylin 4 将 HBase 替换为 Parquet,也就是把所有的数据按照文件存储,每个 Segment 会存在一个 对应的 HDFS 的目录,所有的查询、构建都是直接通过读写文件的方式,不用再经过 HBase。
虽然对于小查询的性能会有一定损失,但对于复杂查询带来的提升是更可观的、更值得的。
B、构建引擎
Kylin Cube 的构建引擎,在 Kylin3.0 中,一般都会使用 MR 作为 Cube 构建引擎去逐层构建 Cube,速度较慢。而在 Kylin4.0 中,将构建引擎换成了特定优化的 Spark 引擎,步骤也减少为了两大步,第一步进行资源探测,收集构建 Cube 所需要的元数据信息。第二步使用 Spark 引擎去计算和构建,有效的提升了 Cube 构建速度。
C、查询引擎
Kylin3.0 的查询完全依托于 Calcite 引擎和 HBase 的协处理器,这就导致当数据从HBase 读取后,如果想做聚合、排序等,就会局限于 QueryServer 单点的瓶颈,而 Kylin 4 则转换为基于 Spark SQL 的 DataFrame 作为查询引擎,得益于 Spark 的分布式查询机制,Kylin4.0 的查询速度也有了不少的改善。