THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!

Apache Kylin : Analytical Data Warehouse for Big Data

Page tree

Welcome to Kylin Wiki.

1、Background

从 Kylin 2.3.0 开始,用户可以使用 CubePlanner 对 cube 进行剪枝和优化。Cube planner 分为两个阶段,阶段 1 可以在构建 Cube 前基于估算的 cuboid 大小推荐 cuboid 列表,这一阶段只会减少 cuboid;阶段 2 是根据用户查询的统计信息为已存在的 Cube 推荐优化后的 cuboid 列表,这一阶段既有减少 cuboid 也有增加 cuboid。

在 kylin 4.0 中,由于实现了全新的 Spark 构建引擎和查询引擎,kylin4.0.0-alpha 中暂时不支持 CubePlanner,而在 kylin4.0.0-beta 中实现了对 CubePlanner 第一阶段的支持,可以参考文档:How to use Cube Planner in Kylin 4

对于 CubePlanner 第二阶段,分为两个步骤,第一个步骤是根据收集的统计信息获取优化后的 cuboid 列表(Recommend Cuboid List);第二个步骤是根据 Recommend Cuboid List 来更新 cube 中的历史 segment,使已构建的 segment 中的 cuboid 与 Recommend Cuboid List 保持一致。

为了更新历史 segment 的 cuboid list 而生成的任务叫做 Optimize Cube Job,每一个已构建的 segment 都会对应一个 Optimize Cube Job,这个任务不会重新构建原 segment 中的所有 Cuboid,它只是从已有的 Cuboid 数据来构建新增 Cuboid,并移除需要删除的 Cuboid,复用之前的全局字典和维度表快照,得到更新后的 Segment;在所有的 Optimize Cube Job 完成之后,会使用一个 Optimize Checkpoint Job 来统一更新 Cube 元数据,并进行垃圾清理,Optimize Checkpoint Job 的完成标志着整个更新 Cuboid List 的工作完成。在这个过程中用户的所有查询任务都不会受到影响。

2、How to update cuboid list for a cube

由于某些局限性, kylin 4.0 中暂时不能支持 CubePlanner 第二阶段的第一个步骤,即自动推荐 Recommend Cuboid List;但是为了使用户可以根据业务场景更灵活的调整 Cube,Kylin 4.0 支持了 CubePlanner 第二阶段的第二个步骤,提供了允许用户手动调整 Cuboid list 的能力。通过调用 REST API (http://host:port/kylin/api/Cubes/{CubeName}/optimize2)为指定 Cube 传入想要删除和想要增加的 Cuboids,就可以更新指定 Cube 的 Cuboid list。Cuboid list 更新后,Kylin 4.0 会对该 Cube 中每个已经构建过的 segment 生成对应的 Optimize Cube Job 来更新历史 segment 的 Cuboid list,最后通过一个 Optimize Checkpoint job 来统一更新 Cube 元数据,并进行垃圾清理。


step1、根据维度计算想要 增加/删除 的 cuboid id

Cuboid Id 是根据 Dimension 在 RowKey 中所在的顺序确定的,比如对于以下 Rowkey column:

其对应的 base cuboid id 的二进制值就是每一个 rowkey column 对应位置都是1,即 111111111111111111,十进制的 cuboid id 就是 262143。

当希望构建 dimension 为 PATT_DT 和 BUYER_ID 的 cuboid 时,那么 rowkey column 中 PATT_DT 和 BUYER_ID 对应的位置为 1, 其他位置为 0,二进制为 100100000000000000,十进制的 cuboid id 为 147456。


step2、调用 REST API 传入想要增加/删除的 cuboid id

REST API
REST API:PUT http://host:port/kylin/api/Cubes/{CubeName}/optimize2
Request Body:
{
"cuboidsAdd":["addId1","addId2"],
"cuboidsDelete":["deleteId1","deleteId2"]
}

通过 REST API 传入想要增加/删除的 cuboid id,经过校验,kylin 4.0 会生成相应的 recomment cuboid list, 生成 optimize segment job 和 checkpoint job,如下图:

由于示例中的 cube 有两个已经构建的 segment,所以生成了两个 OPTIMIZE CUBE JOB 和 一个 OPTIMIZE CHECKPOINT JOB。

OPTIMIZE CUBE JOB:

OPTIMIZE CHECKPOINT JOB:

  • No labels