Kylin:增量构建Cube

2020-02-19  本文已影响0人  longLiveData

Cube的使用包含创建构建两个过程。

创建可以理解为“定义数据结构的过程”
构建可以理解为“往定义好的数据结构中添加计算数据的过程”

Segment

在增量构建中,将 Cube 划分为多个 Segment,每个 Segment 用起始时间和结束时间标志。Segment 代表一段时间内源数据的预计算结果。一个 Segment 的起始时间等于它之前那个 Segment 的结束时间(前闭后开),同理,它的结束时间等于它后面那个 Segment 的起始时间。同一个 Cube 下不同的 Segment 的结构定义、构建过程、优化方法、存储方式等完全相同。

前提

并非所有的 Cube 都适用于增量构建,Cube 的定义必须包含一个时间维度,用来分割不同的 Segment,该维度称为分割时间列。同一个 Model 下不同 Cube 的分割时间列应该是相同的,因此在 Kylin 中将分割时间列的定义放到了 Model 中。

Cube 的配置

Cube 每次增量构建都会生成一个 Segment,随着时间的推移,当前 Cube 会存在大量的 Segments,这时候会产生以下两个问题:

可以在Cube层面进行以下设置来让 Kylin 按照一定的规则自动合并 Segments:

触发增量构建

在进行增量构建时,将增量部分的起始时间和结束时间作为增量构建的一部分提交给 Kylin 的任务引擎,任务引擎会根据起始时间和结束时间从 Hive 中抽取相应时间的数据,并对这部分数据做预计算处理,然后将预计算的结果封装为一个新的 Segment,并将相应的信息保存到元数据和存储引擎中。

当我们为一个已经有 Segment 的 Cube 触发增量构建的时候,起始时间的值已经被确定,不能被修改。如果 Cube 中不存在任何的 Segment,那么 Start Date 的值会被设置为 Partition Start Date(在 Model 中设定)。

仅当 Cube 中不存在任何 Segment,或者不存在任何未完成的构建任务时,Kylin 才接受 Cube 上新的构建任务。未完成的构建任务不仅包含正在运行中的构建任务,还包括已经出错并处于 ERROR 的任务。

Kylin 提供 Rest API 以帮助自动化地触发增量构建:
Build cube(http://kylin.apache.org/cn/docs/howto/howto_use_restapi.html#build-cube

管理Cube碎片(Segments)

Auto Merge Thresholds允许用户设置几个层级的时间阈值,层级约靠后,时间阈值就越大。举例来说,[7days, 28days]这个层级,每当 Cube 中有新的 Segment 生成时,就会触发一次自动合并的尝试:

在挑选连续 Segments 的过程中:

上一篇 下一篇

猜你喜欢

热点阅读