Kylin的工作原理

会有一股神秘感。 提交于 2020-07-29 01:47:02

Apache Kylin的工作原理本质上是 MOLAP(多维立方体分析)

维度和度量

  • 维度就是观察数据的角度,例如:
  1. 电商的销售数据,可以从时间的维度来观察,也可以细化从时间和地区的维度来观察
  2. 统计时,可以把维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、去重计数等聚合计算
  • 度量就是被聚合的统计值,也是聚合运算的结果

时间(维度)

销售额(度量)

2019 1Q

1.7M

2019 2Q

2.1M

2019 3Q

1.6M

2019 4Q

1.8M

 

时间(维度)

地区(维度)

销售额(度量)

2019 1Q

中国

1.0M

2019 1Q

北美

0.7M

2019 2Q

中国

1.5M

2019 2Q

北美

0.6M

2019 3Q

中国

0.9M

2019 3Q

北美

0.7M

2019 4Q

中国

0.9M

2019 4Q

北美

0.9M

 

CubeCuboid

  • 一个数据表或数据模型上的字段就它们要么是维度,要么是度量(可以被聚合)
  • 给定一个数据模型,可以对其上的所有维度进行组合。对于N个维度来说,组合的所有可能性共有2 N 次方种
  • 对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为Cuboid(立方形)
  • 所有维度组合的Cuboid作为一个整体,被称为Cube(立方体)。一个Cube就是许多按维度聚合的物化视图的集合。

说明

维度1地区

维度2时间

维度3

维度4

取值

0或1

0或1

0或1

0或1

  • 数据立方体
  1. Cube 是所有 dimession 的组合
  2. 每一种 dimession 的组合称之为cuboid(立方形)。某一有 n dimession cube 会有 2^n cuboid
  3. 数据立方体只是多维模型的一个形象的说法

 

  • 为什么叫立方体?
  1. 立方体本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度
  2. 为了与传统关系型数据库的二维表区别开来,才有了数据立方体的叫法

 

工作原理

Apache Kylin工作原理是对数据模型做Cube预计算,并利用计算的结果加速查询。具体工作过程如下。

  1. 指定数据模型,定义维度和度量
  2. 预计算Cube,计算所有Cuboid并保存为物化视图(存储到hbase中)
  3. 执行查询时,读取Cuboid,运算,产生查询结果

高效OLAP分析:

  • Kylin的查询过程不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算
  • 利用预计算的结果来执行查询,相比非预计算的查询技术,其速度一般要快一到两个数量级,在超大的数据集上优势更明显
  • 数据集达到千亿乃至万亿级别时,Kylin的速度可以超越其他非预计算技术1000以上

技术架构

Apache Kylin系统可以分为在线查询和离线构建两部分。

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

  1. 数据源主要是Hadoop Hive,数据以关系表的形式输入,且必须符合星形模型,保存着待分析的用户数据。根据元数据的定义,构建引擎从数据源抽取数据,并构建Cube
  2. Kylin可以使用MapReduce或者Spark作为构建引擎。构建后的Cube保存在右侧的存储引擎中,一般选用HBase作为存储
  3. 完成了离线构建后,用户可以从上方查询系统发送SQL进行查询分析
  4. Kylin提供了各种Rest APIJDBC/ODBC接口。无论从哪个接口进入,SQL最终都会来到Rest服务层,再转交给查询引擎进行处理
  5. SQL语句是基于数据源的关系模型书写的,而不是Cube
  1. Kylin在设计时,刻意对查询用户屏蔽了Cube的概念
  2. 分析师只需要理解简单的关系模型就可以使用Kylin,没有额外的学习门槛,传统的SQL应用也很容易迁移
  3. 查询引擎解析SQL,生成基于关系表的逻辑执行计划,然后将其转译为基于Cube的物理执行计划,最后查询预计算生成的Cube并产生结果,整个过程不会访问原始数据源
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!