kylin的cube planner

kylin简介

       Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。整体架构如下:
在这里插入图片描述
       其中我们最关注也是最重要的部分为cube构建性能和查询性能。针对不同的业务场景,在model、cube设计时考虑更多的业务,以得到最优最适合的模型、cube。那如果没有具体的业务场景应该怎么做呢,假使一个kylin新上了一个业务场景,我们对这个业务场景还不是很熟悉的情况下,如何优化能够使Cube的体积更小、查询速度更快呢。在kylin2.3+的版本中引入了一个cube planner的功能。

       在没有优化cube的前提下, kylin会计算每一种维度的组合,这也是kylin的核心:预计算。没中维度计算得到的结果叫做cuboid,cuboid的数量计算公式为2的n次方,n为数据的维度个数。如果是10个维度的数据,不做任何优化, 生成的cuboid数量为1024个cuboid;如果是20个维度,cuboid数量1048576个。那么这个时候的cube计算和存储的压力非常大。这个时候需要对我们的cube做一些优化,在了解业务背景的情况下,可以针对不同的查询模式对维度进行剪枝,kylin提供了聚合组,包括必需维度、层级维度、联合维度,能够显著降低cube的膨胀率,减少cuboid数量,达到优化的目的。
在我们对kylin的的cube优化技巧不够了解的情况下,或者对数据的查询模式不熟悉的情况下,cube planner可以为我们省下很多时间。

cube planner介绍:

       cube planner实际上就是从2的n次方中维度组合中挑选出部分添加到推荐列表中以进行后续的构建。挑选的规则在于cuboid的收益和成本之比,也就是效益比。
cuboid的成本主要包括:

  1. 构建成本:维度组合的数据行数
  2. 查询成本:查询该cuboid需要扫描的行数

       其中,相同的数据一般只会构建一次,而查询是很多次的,所以我们忽略掉构建成本,只考虑查询成本。即:预计算这个cuboid,相比没有这个cuboid对整个cube的所有查询能减少的查询成本。

选择过程

       假入有一个cube,有如上图所示的维度组合,

维度组合ID维度
a(100行)时间、地区、id 、name
b(50行)时间、地区、id
c(75行)时间、id 、name
d(20行)地区、id
e(30行)地区
f(40行)时间、name
g(5行)时间、 id

算法步骤:

  1. 因为维度组合a是Base Cuboid,默认是一定会被预计算的,所以a被加入推荐列表。在当前只有a被计算的情况下,查询剩余所有维度组合都必须通过a,查询成本为100(扫描a所需需的行数)
  2. 估算b的收益比,如果预计算b,那么对于b和其子孙e、f等维度组合的查询都可以通过扫描50行的b来得到。相较于a,查询成本从100降为50,因此预计算b对整个cube的增益为(100-50)*3=150,效益比就是除以b的行数:150/50=3。
  3. 根据第二步的方法计算c、d、e、f、g的效益比:
    c:1.67
    d:8
    e:7
    f: 3
    g:19
  4. 重复第2、3步骤,每轮迭代都加入一种维度组合,直到达到约束条件:
    a,推荐列表中的维度组合膨胀率达到cube膨胀率(kylin.cube.cubeplanner.expansion-threshold,默认值15.0)
    b,本轮选中的维度组合效率比低于既定的最小阈值(默认值 0.01),说明新增加的维组合性价比已经降低了,不需要更多的维度组合了。
    c,算法运行时间达到既定上限。

       这种算法也就是贪心算法,还有另外一种基因算法,这里不做介绍, 在配置中可以选择不同的算法来进行优化:

kylin.cube.cubeplanner.enabled=true(默认为false)
kylin.cube.cubeplanner.expansion-threshold=15.0(默认为15.0)

##下面两个参数决定挑选cuboid的算法为基因算法还是贪心算法
##当维度组合小于24次方,不适用cube planner
##当维度组合数大于24次方且小于28次方,使用贪心算法进行选择cuboid
##当维度组合数大于28次方,使用基因算法进行选择cuboid

kylin.cube.cubeplanner.algorithm-threshold-greedy=4
kylin.cube.cubeplanner.algorithm-threshold-genetic=8

       当你的设计目的是一个自由查询、灵活拖拽的模型,可以选择cube planner。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值