Apache Kylin原理学习之Cube构建

Apache Kylin原理简介

Apache Kylin是一个开源的、基于Hadoop生态系统的OLAP查询引擎,能够通过SQL接口对十亿、甚至百亿行的超大数据集实现秒级的多维分析查询。
Kylin通过预计算实现超大数据集的秒级多维分析查询。对于超大数据集的复杂查询,既然现场计算需要花费较长时间,那么根据空间换时间的原理,我们就可以提前将所有可能的计算结果计算并存储下来,从而实现超大数据集的秒级多维分析查询。Kylin将数据源Hive表中的数据按照指定的维度和指标 由计算引擎MapReduce离线计算出所有可能的查询结果(即Cube)存储到HBase中。

Cube是一种典型的多维数据分析技术,一个Cube可以有多个事实表,多个维表构成。如果您还不了解这些概念,建议您搜索下数据仓库、OLAP、Cube、星型模型、事实表、维度表等等。比如一个简单例子,分析网站流量的Cube,包含一个事实表和四个维度表:

事实表可能有以下字段:

天、来源ID、浏览器ID、操作系统ID、PV、PageNumber等等;

其中,小时、来源ID、浏览器ID、操作系统ID 为维度;

PV、PageNumber为指标;

一般事实表中的维度都采用外键ID的形式,一来可以节省存储,也可以很好的适用于其他分析工具;

维度表包括:

时间维表:年、月、日,其中天为最细粒度,也为该表主键;

访问来源维表:来源ID、来源名称;

浏览器维表:浏览器ID、浏览器名称、etc.

操作系统维表:操作系统ID、操作系统名称、etc.

事实表中的维度,分别与这四张维度表,通过主外键的方式关联。

Kylin中的Cube亦是这种模型。

关于维度组合Cuboid

Kylin中Cube的Build过程,其实是将所有的维度组合事先计算,存储于HBase中,以空间换时间,HTable对应的RowKey,就是各种维度组合,指标存在Column中,这样,将不同维度组合查询SQL,转换成基于RowKey的范围扫描,然后对指标进行汇总计算。

理论上来说,一个N维的Cube,便有2的N次方种维度组合,参考网上的一个例子,一个Cube包含time, item, location, supplier四个维度,那么组合(Cuboid)便有16种:

kylin

一个Cube中,当维度数量N超过一定数量后,空间以及计算消耗将会非常大,Kylin在定义Cube时候,可以将维度拆分成多个聚合组(Aggregation Groups),只在组内计算Cube,聚合组内查询效率高,跨组查询效率较差,所以需要根据业务场景,将常用的维度组合定义到一个聚合组中,提高查询性能,这也是Kylin中查询性能优化的一个重要方面。

Build Cube的过程

定义好Cube之后,Apache Kylin通过MapReduce,将存储在Hive中的事实表和维度表,转换成Cube,存储在HBase中,以实现快速分析查询,整个过程如下图所示:

kylin

STEP1. 根据Cube定义的事实表和维度,在Hive中生成一张中间表;

Create Intermediate Flat Hive Table;

STEP2. 使用MapReduce,从事实表中抽取维度的Distinct值,并以字典树的方式压缩编码,同时也对所有维度表进行压缩编码,生成维度字典;

Extract Fact Table Distinct Columns

Build Dimension Dictionary

STEP3. 计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid,后面会详细介绍。

Save Cuboid Statistics

STEP4. 创建HBase Table;

Create HTable

STEP5. 利用step1中间表的数据,使用MapReduce,生成每一种维度组合(Cuboid)的数据;

Build Base Cuboid Data;

Build N-Dimension Cuboid Data : 7-Dimension;

Build N-Dimension Cuboid Data : 6-Dimension;

。。。。。。

Build N-Dimension Cuboid Data : 2-Dimension;

Build Cube;

STEP6. 将Cuboid数据转换成HFile,并导入到HBase Table中:

Convert Cuboid Data to HFile;

Load HFile to HBase Table;

STEP7. 更新Cube信息,清理中间表:

Update Cube Info;

Garbage Collection;

 

整个Build过程结束。

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

简单的说Cuboid的维度会映射为HBase的Rowkey,Cuboid的指标会映射为HBase的Value。如下图所示:
cube-kv.png-356.2kB

如上图原始表所示:Hive表有两个维度列yearcity,有一个指标列price

如上图预聚合表所示:我们具体要计算的是yearcity这两个维度所有维度组合(即4个cuboid)下的sum(priece)指标,这个指标的具体计算过程就是由MapReduce完成的。

如上图字典编码所示:为了节省存储资源,Kylin对维度值进行了字典编码。图中将beijingshanghai依次编码为0和1。

如上图HBase KV存储所示:在计算cuboid过程中,会将Hive表的数据转化为HBase的KV形式。Rowkey的具体格式是cuboid id + 具体的维度值(最新的Rowkey中为了并发查询还加入了ShardKey),以预聚合表内容的第2行为例,其维度组合是(year,city),所以cuboid id就是00000011,cuboid是8位,具体维度值是1994和shanghai,所以编码后的维度值对应上图的字典编码也是11,所以HBase的Rowkey就是0000001111,对应的HBase Value就是sum(priece)的具体值。

所有的cuboid计算完成后,会将cuboid转化为HBase的KeyValue格式生成HBase的HFile,最后将HFile load进cube对应的HBase表中。

SQL查询是如何转化为HBase的Scan操作的

还是以图2举例,假设查询SQL如下:

    select year, sum(price)
    from table
    where city = "beijing"
    group by year

这个SQL涉及维度yearcity,所以其对应的cuboid是00000011,又因为city的值是确定的beijing,所以在Scan HBase时就会Scan Rowkey以00000011开头且city的值是beijing的行,取到对应指标sum(price)的值,返回给用户。

总结

本文主要通过综合整理两篇Kylin原理介绍博文,记录和分析了Kylin原理及构建Cube的过程,希望对大家有帮助。

参考及转载博客:

  1. https://blog.bcmeng.com/post/kylin-cube.html
  2. lxw的大数据田地 » Apache Kylin原理学习之Cube的创建与Build
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Kylin 是一款开源的分布式分析引擎,旨在为 OLAP(联机分析处理)场景下大数据处理提供高效的解决方案。Kylin 架构设计主要包括四层:数据存储层、计算层、查询层和访问层。 数据存储层:Kylin 支持多种数据源,包括 HBase、Hive 和 RDBMS。在数据存储层,Kylin 将数据进行切分和存储,并构建多维数据模型和 Cube 模型,以此支持多维分析查询。 计算层:Kylin 计算层主要负责构建 Cube 数据模型,从而支持快速的多维分析。Kylin 使用 MapReduce、Spark 和 Flink 等分布式计算框架构建 Cube 模型,并且采用增量计算和全量计算相结合的方式,以保证数据的实时更新和高效查询查询层:Kylin 查询层主要提供两种查询方式:SQL 和 REST API。Kylin 查询层可以直接访问 Kylin Cube 数据模型,同时支持 SQL JOIN 和聚合操作,以支持丰富的多维分析操作。 访问层:Kylin 访问层主要负责提供数据可视化和 BI 工具集成。Kylin 支持多种数据可视化工具,如 Tableau、PowerBI 和 Superset 等,以及多个 BI 工具的集成,如 Apache ZeppelinApache Superset 和 Apache Druid 等。 总之,Apache Kylin 架构设计以分布式计算为核心,通过数据存储、计算、查询和访问四层框架提供高效、快速、多维的 OLAP 型数据分析解决方案,可广泛应用于电商、金融、广告等场景的数据分析处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值