kylin cube优化

一、最基本的cube构建信息:

1.一个度量,并且计算包括:max、min and Count;

2.模型中的所有维度都被使用;

3.hive输入是一个CSV类型的外部表;

4.输出是没有经过压缩的HBase表。

二、kylin cube的优化方法:

1.减少组合;

         通过构建cube时对维度在joint and Hierarchy参数上的配置减少cuboid的组合数量。

        joint参数配置:把所有的id(主键)与对应的信息进行组合;

        Hierarchies参数配置:把可以级联查询的维度可能放在里面;

    注意:当前还不能对同一个维度同时进行joint和Hierarchy参数的配置;

   2.对输出进行压缩配置

压缩算法:snappy and gzip

        注:(snappy的效果大于gzip)二者在时间性能上的区别较小1%,在压缩空间上的区别为18%。

 3.对输入的hive table压缩

   通常构建cube的时间分配如下:

kylin cube优化

通常构建cube时花在创建flat table、Build和clean up上的时间较多。组成比例为:

kylin cube优化



由图看出大多数的时间呗用到create flat table上因此可以对第一步创建flat table进行压缩编码,减少时间消耗。

使用snappy算法压缩后的时间消耗为:

kylin cube优化

hive中的数据采用不同的文件格式进行存储时在构建cube时各阶段的时间消耗情况:

kylin cube优化

注:ORC文件格式概述:https://www.iteblog.com/archives/1014.html

4.对hive表进行分区(未实现优化,效果反而更糟)

5.HBase表存储格式优化

选择对维度的编码(dict、int、fix length)并且设置各维度在rowkey中的顺序(根据各维度的基数大小,大的在前小的在后)

6.通过设置Map和reduce的数量提高MR的性能。

eg:

kylin cube优化

7.提高cube的响应时间

通过设置聚合组(Aggregations group)来提高查询时的命中率。

kylin cube优化

设置一个聚合组和设置3个聚合组的情况对比:3个聚合组相对1个聚合组在构建cube时花费的时间多了3%,存储容量多了0.6%;

但是查询性能更快了。