【Kylin】Kylin中的cube构建

前言

  在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度以及一些附加信息,然后对cube进行build,当然我们也可以根据原始表中的某一个string字段(这个字段的格式必须是日期格式,表示日期的含义)设定分区字段,这样一个cube就可以进行多次build,每一次的build会生成一个segment,每一个segment对应着一个时间区间的cube,这些segment的时间区间是连续并且不重合的,对于拥有多个segment的cube可以执行merge,相当于将一个时间区间内部的segment合并成一个。下面从源码开始分析cube的build和merge过程。本文基于Kylin-1.0-incubating版本,对于Kylin的介绍可以参见:http://blog.csdn.net/yu616568/article/details/48103415

入口介绍

  在kylin的web页面上创建完成一个cube之后可以点击action下拉框执行build或者merge操作,这两个操作都会调用cube的rebuild接口,调用的参数包括:1、cube名,用于唯一标识一个cube,在当前的kylin版本中cube名是全局唯一的,而不是每一个project下唯一的;2、本次构建的startTime和endTime,这两个时间区间标识本次构建的segment的数据源只选择这个时间范围内的数据;对于BUILD操作而言,startTime是不需要的,因为它总是会选择最后一个segment的结束时间作为当前segment的起始时间。3、buildType标识着操作的类型,可以是”BUILD”、”MERGE”和”REFRESH”。
  这些操作的统一入口就是JobService.submitJob函数,该函数首先取出该cube所有关联的构建cube的job,并且判断这些job是否有处于READY、RUNNING、ERROR状态,如果处于该状态意味着这个job正在执行或者可以之后被resume执行,做这种限制的原因不得而知(可能是构建的区间是基于时间吧,需要对一个cube并行的构建多个segment(时间区间的数据)的需求并不明显)。所以如果希望build或者merge cube,必须将未完成的cube的操作执行discard操作。然后根据操作类型执行具体的操作:
1. 如果是BUILD,如果这个cube中包含distinct count聚合方式的度量并且这个cube中已经存在其他segment,则执行appendAndMergeSegments函数,否则执行buildJob函数。
2. 如果是MERGE操作则执行mergeSegments函数。
3. 如果是REFRESH,则同样执行buildJob函数。为这个时间区间的segment重新构建。
  buildJob函数构建一个新的segment,mergeSegments函数合并一个时间区间内的所有segments,appendAndMergeSegments函数则首先根据最后一个segment的时间区间的end值build一个新的segment然后再将所有的时间区间的segments进行合并(为什么包含distinct count的聚合函数的cube的构建一定要进行合并呢?这应该是有distinct-count使用的hyperloglog算法决定的,下次可以专门分析一下这个算法)。

BUILD操作

  Build操作是构建一个cube指定时间区间的数据,由于kylin基于预计算的方式提供数据查询,构建操作是指将原始数据(存储在Hadoop中,通过Hive获取)转换成目标数据(存储在Hbase中)的过程。主要的步骤可以按照顺序分为四个阶段:1、根据用户的cube信息计算出多个cuboid文件,2、根据cuboid文件生成htable,3、更新cube信息,4、回收临时文件。每一个阶段操作的输入都需要依赖于上一步的输出,所以这些操作全是顺序执行的。

1. 计算cuboid文件

  在kylin的CUBE模型中,每一个cube是由多个cuboid组成的,理论上有N个普通维度的cube可以是由2的N次方个cuboid组成的,那么我们可以计算出最底层的cuboid,也就是包含全部维度的cuboid(相当于执行一个group by全部维度列的查询),然后在根据最底层的cuboid一层一层的向上计算,直到计算出最顶层的cuboid(相当于执行了一个不带group by的查询),其实这个阶段kylin的执行原理就是这个样子的,不过它需要将这些抽象成mapreduce模型,提交mapreduce作业执行。

1.1 生成原始数据(Create Intermediate Flat Hive Table)
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值