《Apache Kylin cube优化指南》
来源:互联网 发布:unity3d 画虚线 编辑:程序博客网 时间:2024/06/05 20:47
1.生产场景
号称亚秒级的大数据分析引擎---Apache Kylin就要投产了,但这只OLAP中的神兽,在build数据的时候,速度奇慢且太耗空间,大概一个月的数据,build将近半个小时,且大小将近2GB!!!
2.需求
如何正确驾驭这只OLAP界的“神兽”,让它发挥应有的水平,降低数据膨胀率并且缩短Cube的build时间。
3.解决方案
①数据层面
生产场景中Kylin是以Hive做MetaData的,之前会有这么一种Cube,一个大表,关联两个数据量也颇多的表,经Kylin官方人士解答,这样子是不行的,所以更新后的建表方案转为若干大表关联成的一个视图,类似一张宽表,作为Cube的主表,而和这个主表相关联的lookup表均为数据量相当小的小表。
②Kylin层面
1.尽量将需要展现的字段作为维度,没必要所有的一股脑加进去。
2.每次查询或者要经常group by的字段作为Mandatory维度。且该维度放在rowkey的最前面。
3.将数量相近也就是说某两个字段通过select count("字段名")获取的结果近似1:1,设置为joint维度。
4.rowkey的顺序按查询频率从高到低,从前往后排。
5.将经常出现在同一SQL中的不同维度放置在一个维度组中,将从不出现在一个SQL查询中的不同维度设置在不同的维度组中。
6.Dictionary默认为dict类型,如果某个字段中的值非常大(小幽遇到过的一个字段中的值保存成文本足足有23Kb!!!),大到以至或者可能使得Cube在build过程中出现OOM的错误,则需要将该字段的值设置为fixed_length类型,取可以展现这个维度的前length个字节,比如对于之前那个23kb的字段值,经和业务人员协商,发现取前4000个字节就可以表示这个字段了。所以fixed_length的值设置为4000.值得一提的是,Dictionary默认为false,是不给该字段在内存中建立词典树的,而更改为true则表示给该字段建立词典树。有词典树,则会优化带有该字段的SQL查询,提升查询速度,但相应地也会消耗一些内存。
4.优化结果
经过优化,近似每月数据量均匀分布的一年Cube,build时长均在10min中以内,且大小也维持在10M以内。
5.参考文献
Apache Kylin的Joint Dimensions怎么用
Kylin使用之创建Cube和高级设置
- 《Apache Kylin cube优化指南》
- Apache Kylin Cube优化
- Kylin Cube设计优化
- kylin cube优化
- Apache Kylin优化之—Cube的高级设置
- Kylin系列-Apache Kylin优化之—Cube的高级设置
- Apache Kylin Cube构建算法
- Apache Kylin Cube 构建原理
- Apache Kylin的Cube分析
- Kylin Cube构建过程优化
- Kylin Cube构建过程优化
- Apache Kylin Buid Cube详细流程
- Apache Kylin原理学习之Cube的创建与Build
- Apache Kylin构建cube的FactDistinctColumnsJob阶段出现IllegalStateException异常
- CDH中 Apache Kylin使用spark引擎构建Cube
- Apache Kylin权威指南 1.5版本 笔记
- Kylin系列-Apache Kylin原理学习之Cube的创建与Build
- Kylin系列-Apache Kylin中使用Streaming Table构建准实时Cube
- UICollectionView 再 见
- LeetCode 173. Binary Search Tree Iterator
- OLPreViewController 在ios10上的不显示的解决办法
- android 解决输入法键盘遮盖布局问题
- 【Day37】php导出word文档与excel电子表格的简单代码
- 《Apache Kylin cube优化指南》
- Java基础
- js严格模式实例
- 删除xcode项目svn
- 毕业设计项目开发日志1
- 欢迎使用CSDN-markdown编辑器
- Redis RedisCluster Spring整合
- 委托(3.匿名方法、lambda、闭包、foreach)
- Angular-cli