Ch01-Kylin 介绍
May 20, 2021
Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。
1. 基本信息 #
条目 | 说明 |
---|---|
官网 | https://kylin.apache.org/ |
下载地址 | https://kylin.apache.org/download/ |
2. Apache Kylin 介绍 #
Kylin 对于解决的问题有以下假设:
- 大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值
- 原始的记录不是必需的,或者访问频率和概率都极低
- 聚合是按维度进行的,有意义的维度聚合组合也是相对有限的,一般不会随着数据的膨胀而膨胀
基于以上两点,可以得到一个新的思路—预计算,应尽量多地预先计算聚合结果,在查询时应该尽量利用预计算的结果得出查询结果,从而避免直接扫描可能无限增大的原始记录。
自 Kylin 4.0.0 开始,不再默认使用 HBase,而是使用 Parquet 直接存储到 HDFS 上面。同时计算引擎也不再默认为 MapReduce,而是 Spark 本系列 Blog 全部基于 HBase 4.0.0 讲解
如上图所示,Kylin 在架构设计上,可大体分为四个部分:数据源
,构建 Cube 的计算引擎
,存储引擎
,对外查询接口
。其中数据源主要是 Hive、Kafka;计算框架默认为 Spark;结果存储在 HDFS 中;对外查询接口支持 REST API、JDBC、ODBC。
组件 | 说明 |
---|---|
REST Server | REST Server 是一套面向应用程序开发的入口点,旨在实现针对 Kylin 平台的应用开发工作。此类应用程序可以提供查询、获取结果、触发 cube 构建任务、获取元数据以及获取用户权限等等。另外可以通过 Restful 接口实现 SQL 查询。 |
Query Engine | 当 cube 准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其他组件进行交互,从而向用户返回对应的结果。 |
Routing | 负责将解析的 SQL 生成的执行计划转换成 cube 缓存的查询,cube 是通过预计算缓存在 HDFS 中,这部分查询可以在秒级甚至毫秒级完成,还有一些操作使用过的原始数据 (存储在 Hadoop 的 hdfs 中通过 hive 查询),这部分查询延迟较高。 |
Metadata Manager | Kylin 是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在 Kylin 当中的所有元数据进行管理,其中包括最为重要的 cube 元数据,其它全部组建的正常运作都需以元数据管理工具为基础,包括 cube 的定义、星状模型的定义、job 的信息、job 的输出信息、维度的 directory 信息等等,Kylin 的元数据和 cube 都存储在 HDFS 中。 |
Cube Build Engine | 这套引擎的设计目的在于处理所有离线任务,其中包括 shell 脚本、Java API 以及 MapReduce 任务等等。任务引擎对 Kylin 当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决期间出现的障碍。 |
Storage Engine | 这套引擎负责管理底层存储,特别是 cuboid,其以键值对的形式进行保存。存储引擎使用的是 HDFS,这是目前 Hadoop 生态系统当中最理想的键值系统使用方案。Kylin 还能够通过扩展实现对其它键值系统的支持,例如 Redis。 |
3. 模型 #
数据仓库理论中存在多种方式来建立数据模型,比如星型模型、雪花模型等。
模型 | 说明 |
---|---|
星型模型 | 有一张事实表、以及零个或多个维度表;事实表与维度表通过 主键/外键 相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,顾命名为星型模型。 |
雪花模型 | 如果将星型模型中某些维度的表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联,那么这种模型成为雪花模型(雪花模型可以通过一定的转换,变为星型模型)。 |