-
-
- 概述
-
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP Online Analytical Processing 联机分析处理)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
2014年由中国开源提供给apache社区,2016年正式成为apache顶级项目。2017年推出kylin-2.1版本。
Kylin官网下载:http://kylin.apache.org/cn/download/
官网历史版本下载: https://archive.apache.org/dist/kylin/
源码下载:
Source Repo: git://git.apache.org/kylin.git
Mirrored to Github: https://github.com/apache/kylin
-
-
- KYLIN是什么
-
可扩展超快OLAP引擎:
Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计
- Hadoop ANSI SQL 接口:
Kylin为Hadoop提供标准SQL支持大部分查询功能
- 交互式查询能力:
通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能
- 多维立方体(MOLAP Cube MultidimensionalOLAP):
用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体
- 与BI工具无缝整合:
Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合
- 其他特性:
- Job管理与监控
- 压缩与编码
- 增量更新
- 利用HBase Coprocessor
- 基于HyperLogLog的Dinstinc Count近似算法
- 友好的web界面以管理,监控和使用立方体
- 项目及立方体级别的访问控制安全
- 支持LDAP (Lightweight Directory Access Protocol轻量目录访问协议)
-
-
- KYLIN支持技术
-
Kylin 核心: Kylin OLAP引擎基础框架,包括元数据(Metadata)引擎,查询引擎,Job引擎及存储引擎等,同时包括REST服务器以响应客户端请求
扩展: 支持额外功能和特性的插件
整合: 与调度系统,ETL,监控等生命周期管理系统的整合
用户界面: 在Kylin核心之上扩展的第三方用户界面
驱动: ODBC 和 JDBC 驱动以支持不同的工具和产品,比如Tableau
-
-
- 解决问题
-
在Apache Kylin集群上跑了多个Cube测试,结果表明它能够有效解决大数据计算分析的3大痛点问题。
痛点一:百亿级海量数据多维指标动态计算耗时问题,Apache Kylin通过预计算生成Cube结果数据集并存储到HBase的方式解决。
痛点二:复杂条件筛选问题,用户查询时,Apache Kylin利用router查找算法及优化的HBase Coprocessor解决;
痛点三:跨月、季度、年等大时间区间查询问题,对于预计算结果的存储,Apache Kylin利用Cube的Data Segment分区存储管理解决。
-
-
- Kylin cube原理
-
Kylin的核心思想是利用空间换时间,由于查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中是值得采用的.
Cube说明:
Cube是一种典型的多维数据分析技术,一个Cube可以有多个事实表,多个维表构成。
- 维度组合Cuboid
Cube是所有的维度组合,任一维度的组合称为cuboid。理论上来说,一个N维的Cube,便有2的N次方种维度组合(Cuboid),一个Cube包含time,item, location, supplier四个维度,那么组合便有16种:
Kylin中Cube的Build过程,其实是将所有的维度组合事先计算,存储于HBase中,以空间换时间,HTable对应的RowKey,就是各种维度组合,指标存在Column中。
这样,将不同维度组合的查询SQL,转换成基于RowKey的范围扫描,然后对指标进行汇总计算。
- Kylin构建Cube的过程
如下图所示:
STEP1. 根据Cube定义的事实表和维度,在Hive中生成一张中间表;
STEP2. 使用MapReduce,从事实表中抽取维度的Distinct值,并以字典树的方式压缩编码,同时也对所有维度表进行压缩编码,生成维度字典;
STEP3. 计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid;
STEP4. 创建HBase Table;
STEP5. 利用step1中间表的数据,使用MapReduce,生成每一种维度组合的数据;
STEP6. 将Cuboid数据转换成HFile,并导入到HBase Table中:
STEP7. 更新Cube信息,清理中间表:
整个Build过程结束。
- 增量Cubing
Kylin与传统的OLAP一样,无法应对数据Update的情况(更新数据会导致Cube的失效,需要重建整个Cube)。面对每天甚至每两个小时这样固定周期的增量数据,Kylin使用了一种增量Cubing技术来进行快速响应。Kylin的Cube可以根据时间段划分成多个Segment。在Cube第一次Build完成之后会有一个Segment,在每次增量Build后会产生一个新的Segment。增量Cubing依赖已有的Cube Segments和增量的原始数据。增量Cubing的步骤和新建 Cube的步骤类似,Segment之间以时间段进行区分。
增量Cubing所需要面对的原始数据量更小,因此增量Cubing的速度是非常快的。然而随着Cube Segments的数目增加,一定程度上会影响到查询的进行,所以在Segments数目到一定数量后可能需要进行Cube Segments的合并操作,实际上merge cube是合成了一个新的大的Cube Segment来替代,Merge操作是一个异步的在线操作,不会对前端的查询业务产生影响。
合并操作步骤如下:
- 遍历指定的Cube Segment.
- 合并维度字典目录和维度表快照.
- 利用MapReduce合并他们的 N-Dimension cuboid.
- 将cuboid转换成HFile,生成新的HTable,替代原有的多个HTable.
Kylin使用步骤
1、主要步骤
Kylin中多维分析主要包括以下步骤:
Hive中分析好事实表
Kylin中建立项目(project)
Kylin中建立数据源,从hive同步表
Kylin中建立数据模型model
Kylin中基于model建立Cube
Build Cube
查询Cube
按照上面的过程,最终将Hive中的事实表按照相应的结构,压缩并存储在HBase中。
官网提供了中文文档,说明了如何在Kylin中建立Cube,非常详细:
http://kylin.apache.org/cn/docs15/tutorial/create_cube.html