Kylin 的架构原理

Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc. 开发并贡 献至开源社区。它能在亚秒内查询巨大的 Hive 表。Apache Kylin 令使用者仅需三步, 即可实现超大数据集上的亚秒级查询:

  1. 定义数据集上的一个星形或雪花形模型
  2. 在定义的数据表上构建 cube
  3. 使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时 间即可获得查询结果。
    Kylin 的架构原理

Kylin 数据处理原理及架构原理

kylin 的核心思想是预计算,kylin 对多维分析可能用到的度量进行预计算,将高 维复杂的聚合计算,多表连接等操作转换成预计算结果,将计算好的结果保存成 Cube, 存储于 Hbase 中,供查询时直接访问。预计算过程需要很长时间,但是一旦结果计算出 来,再次查询只是获取结果集合的过程,不需要额外再次浪费集群资源进行长时间查询, 这种以空间换取时间的处理数据模式决定了 Kylin 拥有很好的快速查询、高并发能力。

Kylin 是一个 MOLAP(多维联机数据分析)系统,最常用的是将 Hive 中的数据进行 预计算,利用 Hadoop 的 Mapreduce 或者 Spark 分布式计算框架来实现。Kylin 获取 的数据表是星型数据结构的,目前建模时,只支持一张事实表,多张维度表,假设业务需 求比较复杂,可以考虑在 Hive 中进行预处理生成一张宽表来处理。

对于 Hive 中的维度表和事实表,根据我们指定的维度列来构建 cube,cube 是所有 维度的组合,任一维度的组合称为 cuboid,即:cube 中包含所有的 cuboid。理论上来 说,一个 N 维的 cube,会有 2 的 N 次方种维度组合(cuboid)。举例:假设一个 cube 包 含 time、country、city、location 四个维度,那么就有 16 中 cuboid 组合。通过 计算框架的计算将 OLAP 分析的 cube 数据存储在 Hbase 中,方便后期实现多维数据集的 交互式快速查询。
Kylin 的架构原理
REST Server:提供 Restful 接口,可以通过此接口来创建、构建、刷新、合并 Cube 等相关操作。同时也可以通过 Restful 接口实现 SQL 查询。

Query Engine:目前 Kylin 使用开源的 Calcite 框架来实现 SQL 解析,用户发出 SQL 查询之后,可以通过 Query Engine 来将 SQL Query 语句转换成 SQL 语法树,也 就是逻辑计划。

Routing:负责将解析 SQL 生成的执行计划转换成 cube 缓存的查询,cube 是通过 预计算缓存在 Hbase 中,这部分查询时可以在秒级甚至是毫秒级完成,除此之外,还有一 些操作需要使用原始数据(存储在 HDFS 上)通过 Hive 查询,这部分查询的延迟比较 高。

Metadata:Kylin 中有大量的元数据信息,包括 cube 的定义、星型模型的定义、 job 和执行 job 的输出信息、模型的维度信息等等。Kylin 的元数据存储在 Hbase 中, 存储的格式是 Json 字符串。

Cube Build Engine:立方体构建模块是所有模块的基础,主要负责 Kylin 预计算 中创建 cube,创建的过程是首先通过 Hive 读取原始数据,然后通过 MR 或者 Spark 计算 生成 Htable,最后将数据加载到 Hbase 表中。

上一篇:POJ-1988-Cube Stacking


下一篇:cube.js 集成dreamio