当前位置: > > > Kylin - 核心原理、特点、以及架构详解

Kylin - 核心原理、特点、以及架构详解

1,什么是 Kylin?

(1)Kylin eBay 开发并于 2014 年开源,在 201512 月正式成为 Apache 的顶级项目。
(2)Kylin 是一个开源的、分布式的分析型数据仓库,提供了基于 Hadoop/SparkSQL 查询接口及多维分析(OLAP)能力以支持超大规模数据。
(3)Kylin 的出现主要是为了解决大数据系统中 TBPB 级别数据的快速数据分析需求。

2,Kylin 的使用

Kylin 的使用非常简单,只需要以下三步即可实现超大数据集上的“亚秒”级查询:
  • 1. 在数据集上定义一个星型或雪花型模型。
  • 2. 在定义的数据表上构建 Cube
  • 3. 使用标准 SQL 通过 ODBCJDBC RESTAPI 进行查询。

3,Kylin 的核心原理

(1)Kylin 的核心原理是预计算。预计算的核心是以“空间”换“时间”;对多维分析可能用到的度量进行预计算,将计算好的结果保存成 Cube 并存储到 HBase 中,供查询时直接访问。

(2)Kylin 底层的大致执行流程是:使用 MapReduce/Spark 计算引擎对数据源(例如 Hive)中的数据按照指定的维度和指标进行计算,之后将所有可能的结果存储到 HBase 中供用户查询,如下图所示,整个 Kylin 分为两个部分,即预计算部分和查询部分:
  • 预计算部分对应下图的左边,将 Hive 中的数据按照指定的各种维度组合(Kylin1 种维度组合称之为 1Cuboid)进行计算,生成 Cube,将结果存储在 HBase 中,Kylin 中负责预计算部分的节点是 JobServer
  • 查询部分对应下图中的右边,KylinQueryServer 接受用户的 SQL,依靠 Calcite 进行解析和优化,生成逻辑计划,最终根据 CuboidFilter 生成 HBaseScan,从 HBase 获取到结果后,再交给 Calcite 进行最终的计算。

(3)HBase 中每行记录的 Rowkey 是由各维度的值拼接而成的,度量会被保存在 ColumnFamily 中。为了减少存储代价,这里会对维度和度量进行编码。在查询阶段,利用 HBase 列存储的特性即可保证 Kylin 的快速响应和高并发特性。

4,Kylin 与 Hive 的关系

Kylin 并不是为了取代 Hive,它们有各自的典型应用场景:
  • Hive 没有预计算,可以支持灵活多变的查询需求。但是每次查询都需要查询原始明细数据,效单相对较低。
  • Kylin 的核心就是预计算,需要提前按照查询规则创建 Cube,查询效率比较高,但是无法支持灵活多变的查询需求。

5,Kylin 的特点

  • 可扩展的超快 OLAP 引擎Kylin 是为减少在 Hadoop/Spark 上百亿条规模数据查询延迟而设计的。
  • Hadoop ANSI SQL 接口KylinHadoop 提供标准 SQL 以支持大部分查询功能。
  • 交互式查询能力:通过 Kylin,用户可以与 Hadoop 中的数据进行“亚秒”级交互,在同样的数据集上可以提供比 Hive 更好的性能。
  • 多维立方体OLAP Cube):用户能够在 Kylin 中为上百亿个数据集定义数据模型,并构建立方体。
  • 可与 Bl 工具无缝整合Kylin 提供与 Bl 工具(例如 TableauPower BI/ExcelMSTRQlikSenseHueSuperSet)的整合能力。
  • 其他特性Job 管理与监控;压缩与编码;增量更新;利用 HBase Coprocessor;基于 HyperLogLogDinstinc Count 近似算法;友好的 Web 界面以管理、监控和使用立方体;项目及表级别的访问控制安全;支持 LDAP(量目录访问协议)、SSO(单点登录)。
提示:在 Kylin3.0 版本中,官方发布了 Real-time OLAP 的新特性,用户可以实时地获取和查询流式数据源。

6,Kylin 的不足

Kylin 是通过预计算才实现高性能的,所以它也存在一些缺点:
  • 依赖组件较多,属于重量级方案,运维成本很高。
  • 无法支持灵活多变的即席查询。
  • 预计算量大,比较消耗集群资源。
  • 存储压力比较大,需要保存多种维度聚合的结果。

7,架构分析

(1)Kylin 在架构设计上大体上分为 4 个部分:数据源、构建 Cube 的计算引擎、存储引擎和对外查询接口,具体如下图所示。其中:
  • 数据源主要是 HiveCsvKafkaRDBMS
  • 计算框架支持 MapReduceSpark
  • 结果数据存储在 HBase
  • 对外查询接口支持 REST APIJDBCODBC

(2)Kylin 中核心的内容就是 Cube 的构建和查询,主要包含以下核心组件。
  • REST Server:一套面向应用程序开发的入口,旨在实现针对 Kylin 平台的应用开发工作。可以提供查询、获取结果、触发 cube 构建任务、获取元数据、获取用户权限等功能,还可以通过 REST 接口实现 SQL 查询。
  • Query Engine:查询引擎。当 Cube 准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其他组件进行交互,从而向用户返回对应的结果。
  • Routing:负责将解析 SQL 语句生成的执行计划转换成 Cube 缓存的查询。
  • Metadata:元数据管理。负责管理 Kylin 中的所有元数据,包括 Cube 的定义、星型模型的定义、Job 的信息等。Kylin 的元数据和 Cube 都存储在 HBase 中。
  • Build Engine:构建 Cube 的计算引擎。这套引擎能够处理所有离线任务,包括 Shell 脚本、Java APIMapReduce 任务、Spark 任务等。

附:对比 Hive、Impala 和 Kylin

    HiveImpalaKylin 都适合应用于离线 OLAP 数据分析领域,不过它们各有特色,在技术选型时需要结合具体业务需求进行考虑。这 3 个离线 OLAP 引擎的对比如下。
说明:
  • 计算引擎Hive 的计算引擎默认是 MapReduce,也支持 Tez 或者 SparkImpala 的计算引擎是通过 C++ 自研的 MPP 引擎。Kylin 的计算引擎可以使用 MapReduce 或者 Spark
  • 计算性能Hive 底层会使用 MapReduce,所以计算性能相对一般,不过可以考虑使用 Tez 或者 Spark 引擎来提高性能。Impala 是基于内存计算的,计算性能比较好。Kylin 底层可以使用 MapReduce 或者 Spark 引擎,使用 Spark 引擎时计算性能也比较好。
  • 稳定性Impala 是全部基于内存的,所以稳定性较差。HiveKylin 底层都可以使用 MapReduce,所以稳定性相对较高。
  • 数据规模Hive 比较适合 TB 级别的数据分析,数据规模太大会导致计算时间过长。Impala 也比较适合 TB 级别的数据分析,如果数据规模太大则内存会出现瓶颈。Kylin 比较适合 TBPB 级别的数据分析,因为它会提前对数据进行预计算,在海量数据下也可以提供较好的性能。
  • SQL 支持程度:在 Hive 中定义了简单的类 SQL 查询语言(QL)。Impala 可以兼用 HQLKylin 支持标准 SQL
评论0