9. Kylin

9.1. 概述

  • 是一个OLAP数据分析平台(新版本支持实时模块)。

  • 优点:

    • 可以基于海量数据进行OLAP分析

    • 亚秒级交互式查询(查询性能好)

    • CUBE数据预聚合 (以空间换时间)

      以存储空间换取查询性能的提升,减少查询消耗的时间

      • Kylin拉取Hive中的历史数据,进行cube构建

      • cube会根据维度进行指标聚合

        Cube负载加载Hive数据,通过维度字段对指标字段进行预聚合,聚合好之后将结果数据存储在Hbase

      • cube构建好之后会将结果数据保存在Hbase

        结果数据指的是:聚合好的指标数据

    维度越多,在构建的时候越耗性能

    • web查询数据是通过Kylin的查询服务,直接查询Hbase的数据

9.2. 启动

  • 启动zookeeper

  • 启动HDFS

  • 启动YARN集群

  • 启动HBASE

  • 启动Hive

    • 启动MetaStore

      cd $HIVE_HOME/bin
      hive --service metastore &
      
    • 启动hivesever2

      cd $HIVE_HOME/bin
      hive --service hiveserver2 &
      
  • 启动Yarn HistoryServer

    mr-jobhistory-daemon.sh start historyserver
    
  • 启动Kylin

    cd $KYLIN_HOME/bin
    ./kylin.sh start
    
  • 页面访问地址:

    http://node01:7070
    

    用户名:ADMIN

    密码:KYLIN

9.3. 使用

  • 使用Kylin构建Cube

    • 1、首先数据必须先存在于Hive

    • 2、加载Hive中的数据

    • 3、创建Model,需要指定表,指定维度、指定聚合指标

    • 4、创建Cube,需要指定model名称,指定维度、指定聚合指标、指定构建引擎

    • 5、构建Cube

    • 6、数据查询

可能遇到的问题:

如果build不成功,考虑将HDFS上的元数据和Hbase中Kylin的元数据删除

具体步骤:

  • 清理HDFS上Kylin元数据目录下的文件

  • 清理HBase上Kylin元数据表的数据”KYLIN_Metadata”

  • 删除对应cube在HBase上的表

9.4. 工作原理

本质上是MOLAP(多维立方体分析)

  • Cube:多维立方体,是一个形象的说法,cube模型称为多维立方体模型,由Cuboid组成

  • Cuboid:立方形,也是一个形象说法,对任意一组维度进行组合(维度的数量可以是0,1,或者更多),得到的聚合结果,被称为cuboid(任意多个维度组合形成的物化视图)。cuboid的数量取决于维度的数量,总数量=2^(维度的个数)次方

9.4.1. 技术架构

framework

  • 在线查询模式主要处于上半部分,离线构建处于下半部分。以下为Kylin技术架构的具体内容:

    • 数据源主要是Hadoop Hive,数据以关系表的形式输入,且符合星形模型,保存着待分析的用户数据。根据元数据的定义,构建引擎从数据源抽取数据,并构建Cube

    • Kylin可以使用MapReduce或者Spark作为构建引擎。构建后的Cube保存在右侧的存储引擎中,一般选用HBase作为存储

    • 完成了离线构建后,用户可以从上方查询系统发送SQL进行查询分析

    • Kylin提供了各种Rest API、JDBC/ODBC接口。无论从哪个接口进入,SQL最终都会来到Rest服务层,再转交给查询引擎进行处理

    • SQL语句是基于数据源的关系模型书写的,而不是Cube

      • (1) Kylin在设计时,刻意对查询用户屏蔽了Cube的概念

      • (2) 分析师只需要理解简单的关系模型就可以使用Kylin,没有额外的学习门槛,传统的SQL应用也很容易迁移

      • (3) 查询引擎解析SQL,生成基于关系表的逻辑执行计划,然后将其转译为基于Cube的物理执行计划,最后查询预计算生成的Cube并产生结果,整个过程不会访问原始数据源

9.4.2. 增量构建

  • cube、cuboid和segment的关系

    • 一个cube包含多个cuboid

    • 一个cube包含多个多个segment

      • 一个segment对应于Hbase中的一张表,在做增量构建的时候,每增量构建一次,形成一个segment

    • cuboid和segment的关系

      • cuboid是任意维度组合之后,聚合形成的结果数据,这些结果数据数据结构是一样的

      • segment是物理存储概念,每一张表(每一个segment)的数据结构是一样的

    • 每一个增量构建的segment是有起止时间的,是通过时间进行分区

9.4.2.1. 增量构建与全量构建的对比

全量构建

增量构建

每次更新时都需要更新整个数据集

每次只对需要更新的时间范围进行更新,因此离线计算量相对较小

查询时不需要合并不同Segment的结果

查询时需要合并不同Segment的结果,因此查询性能会受影响

不需要后续的Segment合并

累计一定量的Segment之后,需要进行合并

适合小数据量或全表更新的Cube

适合大数据量的Cube

9.5. 碎片管理

指的是对一个cube下的segment进行管理

  • 管理方式

    • 合并:对多个segment进行合并操作,也就是对多个segment合并形成一个segment

      • 手动合并:在Model中,Action下面选择Merge操作,多个segment会被合并成一个,原来的segment将会被删除,在Merge的过程中不影响查询

      • 自动合并:(推荐使用)

    • 删除:对不再使用的segment进行删除,只保留有效的segment

    • 自定合并

      • 如果自动合并阈值里包含多条阈值数据

      • 首先判断各segment的日期合并,判断是否满足最大的阈值条件,满足就合并,反之不合并

      • 若上一步未满足,会判断是否满足较小的阈值条件,满足就合并,反之不合并

9.6. Cuboid剪枝优化

减少一个维度,cuboid的数量直接减半