部分内容以及图片来自官网,官网链接:http://kylin.apache.org/cn/
Kylin的介绍
Apache Kylin(中文意思麒麟)是一个开源的、分布式的MOLAP数据分析引擎,提供Hadoop之上的SQL查询接口以及多维分析能力以及支持超大规模数据,最初由eBay开发并贡献至开源社区,能够在亚秒内查询巨大的表。
值得一提的是Kylin的核心开发团队已经自立门户,创建了Kyligence(Kylin Intelligence)公司。同时也是第一个由中国人主导的Apache顶级项目。其特点如下:
- 数据源和模型:主要支持Hive、Kafka
- 构建引擎:早期支持MapReduce计算引擎,新版本支持Spark、Flink计算引擎。除了全量构建外,对基于时间的分区特性,支持增量构建
- 存储引擎:构建好的Cube以Key-Value的形式存储在HBase中,通过优化RowKey加速查询。每一种维度的排列组合计算结果被保存为一个物化视图,叫Cuboid
- 优化算法:Cube利用空间换时间,也会根据算法,剪枝优化掉一些多余的Cuboid,寻求平衡
- 访问接口:支持标准SQL接口,可以对接Zeppelin、Tableau等BI工具。SQL通过查询引擎,可以被路由到对应的Cuboid上
总结如下图所示
Kylin既然能在亚秒内返回海量数据的查询结果,必然有应用场景,典型的应用场景如下:
- 在巨大的数据量,单个数据源表千亿行数据级别,且单个数据源达到百TB级别
- 在查询高并发的压力下
- 查询的快速响应
- 下游较灵活的查询方式,需支持带有复杂条件的SQL查询
Kylin的核心思想是预计算,将数据按照指定的维度和指标,预先计算出来所有可能查询结果,利用空间换时间来加速模式固定的OLAP查询。
上文中提到过Cube,Cube的意思即多维立方体,也叫数据立方体。立方体可以由三个维度(也可以多个维度)构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方块)值,这些cell里面包含了要分析的数据,称之为度量值。
- 立方体:由维度构建出来的多为空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行
- 维度:观察数据的角度,一般是一组离散的值。对于N哥维度来说,所有可能的组合有2的N次方个
- 度量:聚合计算的结果,一般是连续的值
- Cuboid:指Kylin中在某一种维度组合下所计算的数据
- 事实表中的一个字段,要么是维度,要么是度量值(可以被聚合)
- 给定一个数据模型,可以对其上的所有维度进行组合。对于N个维度来说,所有可能的组合有2的N次放个
- Cube(也称为Data Cube),即数据立方体,是一种常用数据分析与索引技术,可以对原始数据建立多维度
- Cuboid特指Kylin在某一种维度组合下所计算的数据
Kylin架构图如下(图片来自于官网)
Kylin系统可以分为两部分,在线查询和离线构建两部分。在线查询模式主要处于上半部分,离线构建处于下半部分。技术架构如下:
- 数据源主要是Hadoop Hive,数据以关系表的形式输入,保存着待分析的数据。根据元数据的定义,构建引擎从数据源抽取数据,并构建Cube
- Kylin可以使用MapReduce或Spark作为构建引擎。构建过后的Cube保存在右侧的存储引擎中,一般选用HBase作为存储
- 完成离线构建后,用户可以从查询系统发送SQL进行查询分析
- Kylin提供了各种Rest API、JDBC/ODBC接口。无论从哪个接口进入,SQL最终都会来到Rest服务层,再转交给查询引擎进行处理
- SQL语句是基本数据源的关系模型书写的,而不是Cube
- Kylin在设计时,刻意对查询用户屏蔽了Cube的概念
- 只需要理解关系模型就可以使用Kylin,没有过多的学习门槛,传统的SQL应用也容易迁移
- 查询引擎解析SQL,生成基于关系表的逻辑执行计划,然后将其转换为基于Cube的物理执行计划,最后查询预计算生成的Cube并产生结果,整个过程不会访问原始数据源
在上图中其组件的功能如下:
- Rest Server:提供Restful接口,例如创建、构建、刷新、合并等Cube相关操作,Kylin的Projects、Tables等元数据管理,用户访问权限控制,SQL的查询等
- Query Engine:使用Apache Calcite框架来实现SQL解析,可以理解为SQL引擎层
- Routing:负责将SQL生成的执行计划转换成Cube缓存的查询,这部分查询是可以在秒级甚至毫秒级完成
- Metadata:Kylin中大量的元数据信息,包括Cube的定义、星型模型的定义、Job和执行Job的输出信息、模型的维度信息等,Kylin的元数据和Cube都存储在HBase中,存储格式为json字符串
- Cube Build Engine:所有模块的基础,主要负责Kylin预计算中创建Cube,创建的过程中首先通过Hive读取原始数据,然后通过MapReduce或者Spark计算引擎生成Htable,最后将数据load到HBase表中
具体工作过程如下:
- 指定数据模型,定义维度和度量
- 预计算Cube,计算所有Cuboid并保存为物化视图(存储到HBase中)
- 执行查询时,读取Cuboid,计算并产生查询结果
Kylin的安装
在安装Kylin之前,我们要安装好Hive、Hadoop、HBase、Zookeeper、Kafka、Spark。不知道怎么安装的可以参考我之前写的文章。在这我就不过多的进行介绍了。
有一点需要注意的是之前HBase介绍安装的时候指定了zk的端口(2181的端口),这次安装无需指定端口。hbase-site.xml文件
1 | <!-- 指定hbase在HDFS上存储的路径 --> |
下面进入到真正安装Kylin的步骤
- 下载安装包并解压缩,我这下载的是3.1.1的版本
1
tar zxvf apache-kylin-3.1.1-bin-hbase1x.tar.gz
- 增加环境变量,并让生效
1
2
3
4
5
6vim /etc/profile
增加以下内容
export KYLIN_HOME=/opt/lagou/servers/kylin-3.1.1
export PATH=$PATH:$KYLIN_HOME/bin
让其配置生效
source /etc/profile - 增加kylin依赖组件的配置
1
2
3
4
5
6cd $KYLIN_HOME/conf
ln -s $HADOOP_HOME/etc/hadoop/hdfs-site.xml hdfs-site.xml
ln -s $HADOOP_HOME/etc/hadoop/core-site.xml core-site.xml
ln -s $HBASE_HOME/conf/hbase-site.xml hbase-site.xml
ln -s $HIVE_HOME/conf/hive-site.xml hive-site.xml
ln -s $SPARK_HOME/conf/spark-defaults.conf spark-defaults.conf - 修改kylin.sh
1
2
3
4
5
6
7cd $KYLIN_HOME/bin
vim kylin.sh
在 kylin.sh 文件头部添加
export HADOOP_HOME=/opt/servers/hadoop-2.9.2
export HIVE_HOME=/opt/servers/hive-2.3.7
export HBASE_HOME=/opt/servers/hbase-1.3.1
export SPARK_HOME=/opt/servers/spark-2.4.5 - 检查依赖步骤五可能会出现
1
KYLIN_HOME/bin/check-env.sh
command not found
的错误,需要执行yum -y install net-tools
解决此问题 - 第5步没问题的话,启动各种服务
例如启动zk、HDFS、Yarn、HBase、Hive。最后启动Kylinkylin.sh start
- 登录Kylin Web界面,地址
http://ip:7070/kylin
,默认的用户名为ADMIN,密码为KYLIN。用户名和密码均为大写