Ch01-Kylin 介绍

Ch01-Kylin 介绍

May 20, 2021
Apache Kylin
kylin

Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。

1. 基本信息 #

条目 说明
官网 https://kylin.apache.org/
下载地址 https://kylin.apache.org/download/

2. Apache Kylin 介绍 #

Kylin 对于解决的问题有以下假设:

  • 大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计值
  • 原始的记录不是必需的,或者访问频率和概率都极低
  • 聚合是按维度进行的,有意义的维度聚合组合也是相对有限的,一般不会随着数据的膨胀而膨胀

基于以上两点,可以得到一个新的思路—预计算,应尽量多地预先计算聚合结果,在查询时应该尽量利用预计算的结果得出查询结果,从而避免直接扫描可能无限增大的原始记录。

kylin-arch

自 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. 模型 #

数据仓库理论中存在多种方式来建立数据模型,比如星型模型、雪花模型等。

模型 说明
星型模型 有一张事实表、以及零个或多个维度表;事实表与维度表通过 主键/外键 相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,顾命名为星型模型。
雪花模型 如果将星型模型中某些维度的表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联,那么这种模型成为雪花模型(雪花模型可以通过一定的转换,变为星型模型)。