1. 目录
- 多维立方体
- cube构建过程
- 设计优化
- 构建优化
- 矛盾
- 未来
多维立方体
实际生产中在各种指标下的统计有各种维度组合,工作繁冗
关键要点:创建一个统一的目标维度,这个表应该包含所有的可能性维度字段
利用hive的高阶聚合函数,在一条SQL中实现可能的维度组合
with cube 函数包含所有可能的组合
grouping sets() 用户自定义所有可能的组合
with rollup 右到做递减多级的统计
cube构建过程
创建hive中间表
重分发中间表
提取事实表唯一列
构建维度字典
保存CUBOID统计数据,创建HTBLE
构建基础CUBOID层级构建,构建N维CUBOID或者构建CUBE-快速构建算法
CUBOID数据转化HFILE
HFILE数据导入HBase
更新CUBE元信息
清理资源(中间表)
具体的见之前写的kylin入门篇
设计优化
假设有10个维度,在没有优化的情况下,会存在2^10种cuboid假设有20个维度,在没有优化的情况下,则有1048576中cuboud维度越多,造成预计算的数据量越大,对计算的数据量越大,对计算和存储都会造成非常大的压力,甚至是无法计算
- 聚合组
将维度根据业务需求分组,组合关系紧密的维度,隔离关系弱的维度,从而减少cuboids个数 - 强制维度
每个分组中都可以有0个、1个或多个强制维度,每多一个强制维度,总的cuboids减少一半 - 层级维度
将多个维度按照指定的顺序,只以层级的顺序组合 - 联合维度
将多个维度捆绑,被捆绑的所有维度,在cuboid中要么都出现,要么都不出现
构建优化
需求: Cube构建优化指优化cube的build过程,加快构建速度和减少构建的数据量
1)设置与Hive表相同的分区列
2)提高build过程MapReduce任务的并发度
3)修改超高基维度的字典编码方式
4)提高逐层构建算法的构建并行度
5)Rowkey优化,超高基维度尽量放在前面
6)增加Cuboid转化为Hfile的并行度
矛盾
由于业务是不断增加的,维度也是不断增加的,导致依据指标的构建cube方法,要不断进行迭代,迭代就要测试cube性能,导致异常
如果不按照指标来构建,预组合或者隔离,可能会导致没有这种组合或者膨胀率过高
未来
Cube膨胀率稳定在150%内
95%的指标稳定在3s
建立cube查询指标
Cube监控改进
Cube命名规范
其实我只是用了kylin一小部分的功能,大部分功能还是没有应用场景的.....