前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Kylin Cube优化方式

Apache Kylin Cube优化方式

作者头像
用户5252199
发布2022-04-18 14:12:37
4540
发布2022-04-18 14:12:37
举报
在Kylin高性能的背后,Cube是至关重要的核心,上篇有说到cube是所有dimession的组合,每一种dimession的组合称之为cuboid。有n个dimession的cube会有2^n个cuboid,一个优化得当的Cube既能满足高速查询的需要,又能节省集群资源,本文将会从Kylin Cube的设计方面来了解一下Cube的优化方案。

一:为什么需要对Cube进行优化

前面说过,cube时所有维度的组合,当我们有10个维度时,那么就会计算2^10 也就是1024个cuboid,但是当我们真正查询的时候,可能只会用到100个,如果不做优化的话

1.会使得build出来的cube size 很大,从而占用大量的磁盘空间

2.cube build的时间会很长

3.会占用集群的计算资源

所以如果使用kylin做数据分析,那么cube优化将是必做的一项工作。

二 :Cube 维度优化主要方式

  • CubeID 剪枝优化
  • 衍生维度优化
  • 聚合组优化
  • 强制维度
  • 层次维度
  • 联合维度
  • Cube并发粒度优化

上面的优化方式,都可以认为是对维度的一种剪枝,因为每种优化的最终的目的都是为了减少cubeid的数量,下面来逐个介绍每个优化项的概念以及使用场景

CubeID 剪枝优化

前面说到如果有10个维度那么就会生成2^10=1024个cubeid,如果有20个维度那么将会生成2^20=1048576个cubeid,kylin.properties中参数xxx=4096 也就是说当cubeid数量大于4096个时是无法进行创建的,会报error 为:

1.检查Cubeid数目

执行命令 :bin/kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader xxx // xxx 为CustName

2.检查cube size

在kylin web gui 的model界面选择一个READY状态的cube,将光标移到Cube Size上面,会显示出Cube的源数据的大小,以及当前Cube的大小除以源数据大小的比例,如图:

一般,cube的膨胀率应该在0%-1000%之间,如果Cube的膨胀率超过了1000%,那么就需要查询其中的原因了,导致膨胀率高的原因一般为以下几点:

1):Cube的维度数量较多,没有进行很好的剪枝

2):Cube中存在较高基数的维度,导致这类维度每个cubeid占用的空间很大,从而造成cube体积变大

3):存在比较占用空间的度量

对于cube膨胀率高的情况下,需要针对实际的业务需求进行分析,可以考虑通过下面的几种优化方式进行优化

[Dervied Dim]衍生维度优化

衍生维度(Dervied Dim):当一个或者多个维度能够从主键中推断出来,那么这些维度列就称之为衍生“Dervied” 列

衍生维度(Dervied Dim)优化效果:维度表中的n个维度计算,将cubeid从2^n 减为2

衍生维度使用场景:

在星型模型中,有一个用户维度表,表中包含了ID,A,B,C 其中ID 为PK,在这里通过ID的值就可以确定A,B,C的值,因为A,B,C为ID的dervied。当进行build一个cube包含A,B,C 的时候,只需要包含ID,并且将A,B,C标记为derived ,这样dervied列就不会生成cubeid

[Aggregation Group]聚集组优化

聚合组(Aggregation Group): 根据业务的维度组合,划分出具有强依赖的组合,这些组合称之为聚合组,用来控制哪些CubeID用来组合计算

聚合组优化效果:如果有4个维度,分别为A,B,C,D,那么就会有16个cubeid,如果AB和CD分别为聚集组的话 那么cubeid的数量就缩减为了8个。

聚合组的使用场景:所有维度中,有部分维度之间具有聚合操作的,可以将这些维度放在一个聚合组内。不放在聚合组里面的,就直接进行base cube操作

[Mandatory Dimensions]强制维度

强制维度(Mandatory Dimensions):所有CubeID中,都包含的维度称之为强制维度,不包含强制维度的CubeID不会计算

优化效果 :只计算包含强制维度的,CubeID的数量会缩减一半。

使用场景:

假如有三个维度A,B,C。那么CubeId就会有8个,分别为ABC,AB,BC,AC,A,B,C,这时将A设置为强制维度,那么就只会计算ABC,AB,AC,A这四个CubeID

[Hierarchy Dimension]层次维度

层次维度(Hierarchy Dim):某些维度之间具有上下层次关联

优化效果 :如果有三个维度A,B,C 设置为层次维度,那么cubeid数量将由2^3减为n+1

使用场景:比较适用于进行下钻分析,比如年月日,省市县这种。

[Joint Dimension]联合维度

联合维度(Joint Dimension):固定用来分组的维度查询

优化效果:将多个维度优化到一个维度

使用场景:假如有ABC三个维度,但是在查询的时候只会出现group by A,B,C,而不会出现group A,group by B,group by A,B等等这种情况,那么就可以将A,B,C设置为联合维度

调整Cube并发粒度

当Segment中某个cuboid的大小超出一定的阀值时,系统会将该cuboid的数据分片到多个分区,从而实现cuboid数据读取的并行化,优化cube的查询速度。

kylin的默认设置中kylin.hbase.region.cut时5G,kylin.hbase.region.count.min=1,kylin.hbase.region.count.max=500

在实际应用中(根据实际数据量调整),可以将kylin.hbase.region.count.min=2,kylin.hbase.region.count.max=100,kylin.hbase.region.cut=1

上面设置为最小为2个分区,每个分区大小为1G,最多设置100个region分区

参考资料 :

http://kylin.apache.org/blog/2016/02/18/new-aggregation-group/

http://kylin.apache.org/docs/howto/howto_optimize_cubes.html

Apache Kylin 权威指南

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-01,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 大数据技术博文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com