与kylin_OLAP引擎—Kylin介绍

Apache Kylin是一个开源OLAP引擎,通过预计算技术提供亚秒级的大数据SQL查询。本文介绍了Kylin的核心概念,如模型、Cube、Rowkeys优化,以及查询优化策略,包括并发粒度、Rowkeys顺序调整和度量精度降低。此外,还涵盖了Kylin的SQL语法支持,如SELECT、JOIN、窗口函数等。
摘要由CSDN通过智能技术生成

1 Apache Kylin概述

Apache Kylin是Hadoop大数据平台上的一个开源OLAP引擎。它采用多维立方体预计算技术,可以将大数据的SQL查询速度提升到亚秒级别。

Apache kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在hbase中,对外暴露JDBC、ODBC、Rest API的查询接口,即可实现实时查询。

2 Apache Kylin核心概念

  • 表(table):This is definition of hive tables as source of cubes,在build cube 之前,必须同步在 kylin中。
  • 模型(model):模型描述了一个星型模式的数据结构,它定义了一个事实表(Fact Table)和多个查找表(Lookup Table)的连接和过滤关系。
  • Cube 描述:描述一个Cube实例的定义和配置选项,包括使用了哪个数据模型、包含哪些维度和度量、如何将数据进行分区、如何处理自动合并等等。
  • 分区(Partition):用户可以在Cube描述中使用一个DATA/STRING的列作为分区的列,从而将一个Cube按照日期分割成多个segment。
  • 维度(Dimension): 一组属性,提供结构化的标签信息,一般作为报表的坐标轴。
  • 度量(Measure): 一类可以进行聚合分析的特殊维度,聚合后的结果称为指标。
  • 数据立方体(cube):是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过Cube对数据进行分析,可以大大加快数据的查询效率。是所有cuboid的集合,作为存储和分析的基本单位。
  • Cuboid:给定一个数据模型,我们可以对其上的所有维度进行组合。对于N个维度来说,组合的所有可能性共有2的N次方种。对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为Cuboid
  • Cube Segment:是指针对源数据中的某一个片段,计算出来的Cube数据。通常数据仓库中的数据数量会随着时间的增长而增长,而Cube Segment也是按时间顺序来构建的。

3 Apache Kylin原理

1、Kylin的预计算是如何实现的?

将数据源Hive表中的数据按照指定的维度和指标 由计算引擎MapReduce离线计算出所有可能的查询结果(即Cube)存储到HBase中。

2、具体的计算逻辑?

整个立方体称为1个cube,立方体中每个网格点称为1个cuboid,图中(A,B,C,D)和(A,D)都是cuboid,(A,B,C,D)称为Base cuboid。

cube的计算过程是逐层计算的,首先计算Base cuboid,然后计算维度数依次减少,逐层向下计算每层的cuboid。先把最细维度的所有指标值都sum出来,然后减少维度再sum, 最后将所有sum。

6e78f1d068ff84b5b6d28e0a383db6c8.png

3、Cuboid 的维度和指标如何转换为HBase的KV结构?

简单的说Cuboid的维度会映射为HBase的Rowkey,Cuboid的指标会映射为HBase的Value。在计算cuboid过程中,会将Hive表的数据转化为HBase的KV形式。Rowkey的具体格式是cuboid id + 具体的维度值

1d5df790d5e3931f8edd80dcfefee436.png

4 Apache Kylin技术架构

Apache Kylin系统可以分为在线查询和离线构建两部分,技术架构如图所示,在线查询的模块主要处于上半区,而离线构建则处于下半区。

3d9f2f1f3957f477db225ce420f8f3d5.png

5 快速入门

  1. 星型模型

数据挖掘有几种常见的多维数据模型,星形模型(Star Schema)、雪花模型(Snowf?lake Schema)、事实星座模型(Fact Constellation)等。

星形模型中有一张事实表,以及零个或多个维度表;事实表与维度表通过主键外键相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,故取名为星形模型。如果将星形模型中某些维度的表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联,那么这种模型称为雪花模型。

星座模型是更复杂的模型,其中包含了多个事实表,而维度表是公用的,可以共享。

2.维度表的设计

除了数据模型以外,Kylin还对维度表有一定的要求,具体要求如下。

  • 要具有数据一致性,主键值必须是唯一的;Kylin会进行检查,如果有两行的主键值相同则会报错。
  • 维度表越小越好,因为Kylin会将维度表加载到内存中供查询;过大的表不适合作为维度表,默认的阈值是300MB。
  • 改变频率低,Kylin会在每次构建中试图重用维度表的快照,如果维度表经常改变的话,重用就会失效,这就会导致要经常对维度表创建快照。
  • 维度表最好不要是Hive视图(View),虽然在Kylin1.5.3中加入了对维度表是视图这种情况的支持,但每次都需要将视图进行物化,从而导致额外的时间开销。

3.维度的基数

维度的基数(Cardinality)指的是该维度在数据集中出现的不同值的个数;例如“国家”是一个维度,如果有200个不同的值,那么此维度的基数就是200。通常一个维度的基数会从几十到几万个不等,个别维度如“用户ID”的基数会超过百万甚至千万。基数超过一百万的维度通常被称为超高基数维度(Ultra High Cardinality,UHC),需要引起设计者的注意。

Cube中所有维度的基数都可以体现出Cube的复杂度,如果一个Cube中有好几个超高基数维度,那么这个Cube膨胀的概率就会很高。在创建Cube前需要对所有维度的基数做一个了解,这样就可以帮助设计合理的Cube。计算基数有多种途径,最简单的方法就是让Hive执行一个count distinct的SQL查询;

4.应用

a 新建项目

由顶部菜单栏进入 Model 页面,然后点击 Manage Projects。

9bfafc51d3eaf974ce460c859cc22ae4.png

点击 + Project 按钮添加一个新的项目。

e514bce5fffa4246e2a089c732ea057b.png

填写下列表单并点击 submit 按钮提交请求。

3f69bd3ce20f32dd58992187c2352bc5.png

b 同步Hive表

登录Kylin的Web界面,创建新的或选择一个已有的项目之后,需要做的就是将Hive表的定义导入到Kylin中。单击Web界面的Model→Data source下的“Load Hive Table”图标,然后输入表的名称(可以一次导入多张表,以逗号分隔表名),单击按钮“Sync”,Kylin就会使用Hive的API从Hive中获取表的属性信息。

2e1e26cf18f6e693cfac9ad99b9fb5db.png
cd16f3b7ca3c7c4ab0a75ca08d5df4bc.png

### 同时,Kylin会在后台触发一个MapReduce任务,计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值