Kylin设计详解 三

Cube 构建前优化策略

Aggregation Groups 直译过来是聚合组。就是指定 Cube 中哪些维度会同时出现,若 Cube 中有两个维度没有同时出现在任何一个聚合组中,Cube 构建时就不会生成同时包含这两个维度的 Cuboid,聚合组是一个强大的剪枝工具。主要包含以下几项:

Max Dimension Combination:查询时会涉及到的最大维度个数。设置后,多于该维度个数的 Cuboid 将不会被构建。

Includes:聚合组里包含哪些维度。

Mandatory Dimensions:在该聚合组中,有哪些维度是查询时必选的。

Hierarchy Dimensions:哪些维度之间有层级关系,如 国家 -> 省 -> 市。

Joint Dimensions:哪些维度之间几乎是一对一的。
注意:若某维度被设置为 Mandatory Dimensions,该维度将不允许出现在 Hierarchy Dimensions 或 Joint Dimensions 中。

 

rowkey 的优化分为以下几个方面:

Hbase 中 rowkey 的维度顺序。《Apache Kylin 权威指南》中给出了一个维度评分的公式,维度评分越高,越应该放在前排:

维度打分 = 维度出现在过滤条件中的概率 * 用该维度过滤时可以过滤掉的记录数

维度编码。维度编码有以下几种:
a) boolean:布尔型。
b) dict:字典型,一般把字符串映射为整型,rowkey 中存储映射后的整型数值,字典在运算时会加载到内存中,若维度基数过高,可能会导致内存溢出。此时应考虑换成其他数据编码。
c) fixed_length:定长,若维度值长度不等,编码时会对其进行截断或补位,适用于电话号码等定长维度。
d) fixed_length_hex:16进制定长编码,用途尚不明确。
e) integer:整型编码。

是否按某维度分片。一般来说,数据分片策略可近似地认为是随机的,若设置时按某维度进行分片,可能会提高查询效率,但如果这个分片的维度基数过高,查询时可能会造成 Hbase 过大的压力,甚至会影响到 Kylin 的可用性。此优化项需谨慎使用。

官方推荐单台 Hbase 机器的 region 数量在 100 个左右,若超过太多,可能会影响查询性能。

 

必须出现的 Cuboid,支持文件导入。
还有一种方式可以指定要构建的 Cuboid,就是把这个 Cuboid 中出现的所有维度放到一个聚合组里,再把这些维度全部设置为 Mandatory Dimensions。 

目前有两种 Cubing Engine 可供选择:MapReduce 和 Spark,前者速度慢,但稳定,后者速度快,但有内存占用过高,导致系统不稳定的风险。
一般来说,若有 COUNT_DISTINCT 指标,我们会优先考虑稳定性,选择 MapReduce,否则我们优先考虑速度,选择 Spark。

一般来说,COUNT_DISTINCT 指标会单独放到一个列簇里面,其他指标会放到另一个列簇里面。若同时有多个 COUNT_DISTINCT 指标,需要根据每个指标列占用空间的大小,评估是否要把不同的 COUNT_DISTINCT 指标放到不同的列簇当中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值