Kylin的介绍

部分内容以及图片来自官网,官网链接: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://centos130:9000/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个⽤“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>centos130,centos132,centos133</value>
</property>

下面进入到真正安装Kylin的步骤

  1. 下载安装包并解压缩,我这下载的是3.1.1的版本
    1
    tar zxvf apache-kylin-3.1.1-bin-hbase1x.tar.gz
  2. 增加环境变量,并让生效
    1
    2
    3
    4
    5
    6
    vim /etc/profile
    # 增加以下内容
    export KYLIN_HOME=/opt/lagou/servers/kylin-3.1.1
    export PATH=$PATH:$KYLIN_HOME/bin
    # 让其配置生效
    source /etc/profile
  3. 增加kylin依赖组件的配置
    1
    2
    3
    4
    5
    6
    cd $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
  4. 修改kylin.sh
    1
    2
    3
    4
    5
    6
    7
    cd $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
  5. 检查依赖
    1
    $KYLIN_HOME/bin/check-env.sh
    步骤五可能会出现command not found的错误,需要执行yum -y install net-tools解决此问题
  6. 第5步没问题的话,启动各种服务
    例如启动zk、HDFS、Yarn、HBase、Hive。最后启动Kylinkylin.sh start
  7. 登录Kylin Web界面,地址http://ip:7070/kylin,默认的用户名为ADMIN,密码为KYLIN。用户名和密码均为大写