Apache Kylin : Analytical Data Warehouse for Big Data
Welcome to Kylin Wiki.
1. 在开始之前,需要了解以下概念:
1.1 System Cube(指标数据统计)
在开启 Cube Planner 之后,会生成 5 张 Hive 表(其实我不知道什么时候生成这 5 张 Hive 表的,或者是跑了一个脚本就生成了,然后需要这 5 张 Hive 表才能使 System Cube 生效),这 5 张 Hive 表分别记录了查询和任务的相关指标数据,如查询的响应时间,任务的成功/失败数量,这 5 张 Hive 表也是 System Cube 的基础。
在 Kylin 的 Web GUI 会生成一个项目 KYLIN_SYSTEM,该项目中包含 5 个 Cube,它们就是 System Cube。每一个 System Cube 对应一张 Hive 表,Cube 中根据表字段含义设置了维度列和度量列,因此用户在构建 System Cube 后,可以分析 kylin 系统的相关指标数据。仪表盘页面会显示重要的指标数据。
Hive 表信息请查看:Hive Tables for System Cube
1.2 Dashboard(指标数据展示)
System Cube 能够帮助用户了解查询总数、任务总数、平均查询延迟、平均 Cube 膨胀率这些相对重要的数据,这些数据将在 Dashboard 页面显示。
需要注意的是,每一次在 Kylin 的查询或任务,都会在 Hive 表生成相应的数据,但是数据生成一般是有延迟的(延迟时间可配置)。其次用户需要通过构建 System Cube 将 Hive 表中的数据加载到 Kylin 中,然后才能在 Dashboard 看到相应的指标数据。也就是说一般意义上,Dashboard 中显示的数据并不是最即时的系统数据。
1.3 Cube Planner (Cube 减枝工具)
背景
- 在 Kylin 中如果不加以控制,滥用维度,可能造成 Cube 膨胀非常厉害,从而占用系统存储,影响查询效率。因此 Kylin 提供了 Cube Planner 功能,该功能能够将利用率低的 Cuboid 剪枝,从而降低膨胀率,提升系统效率。
- 并不是所有查询都需要通过与它完全匹配的 Cuboid 回答,才能获得最好的查询性能。有时通过父 Cuboid(如[ABC-M1])回答的查询性能也非常优秀,此时我们将子 Cuboid(如[AB-M1])构建出来并不能带来明显的性能提醒,且花费了一定的存储资源,是没有必要的。
- 还有更多 Cube 剪枝的必要性,这里不再赘述。。
Cube Planner 分为两个阶段:
- 第一阶段发生于初次构建 Segment 时,Kylin 通过算法及采样数据计算出 Cuboid 推荐列表(是 Cuboid 推荐列表吗?还是维度推荐列表?),然后根据此列表剪枝维度,构建 Cube
- 第二阶段发生于 Cube 被使用一段时间之后,此时我们拥有了一些查询该 Cube 的指标数据,这些数据就存储在上述 Hive 表中,也能通过 System Cube 被记录。有了这些指标数据后,Kylin 就能够判断哪些 Cuboid 很少被利用,并通过 Cube Planner 推荐用户“剪去”这些 Cuboid,从而得到一个更精炼的 Cube。
1.4 模块关系图
2. 在测试中,需要完成以下内容:
2.1 目标:
- 本 Test Plan 应该覆盖 Cube Planner,System Cube,Dashboard 的所有内容。
- 本 Test Plan 能够从用户视角验证 System Cube 生效,Dashboard 指标数据正确,Cube Planner 能够按照预期正确剪枝。
2.2 可能的测试要点
- 测试 Hive 表:在 Kylin 中做一些操作,如查询,Job 构建,然后查看 Hive 表中的数据是否有变化,变化是否正确 →
- 测试 System Cube & Dashboard:构建 System Cube,查看 Dashboard 中的数据是否有变化,变化是否正确 →
- 测试 Cube Planner 阶段 1 :构建某 Cube 对应的特定的数据集(注意数据量,基数等),构建该 Cube,查看按照 Cube Planner 的算法是否有效的进行 Cuboid 减枝。
- 测试 Cube Planner 阶段 2:构建某 Cube 下的特定的查询集(如某些 Cuboid 从不击中,某些 Cuboid 总是被击中),执行查询集,构建 System Cube 后通过 Cube Planner 优化 Cube,查看 Cuboid 冷热是否正确,优化建议是否正确
2.3 待完成的内容:
原理性的问题,待学习:
- Cube Planner 的阶段 1,两种算法是如何剪枝的,不明白的话会影响该部分的测试,这个我看了多次但是不太明白
- Cube Planner 的阶段 2,多么冷的 Cuboid 会被剪枝?
实践性的问题,待验证:
- Dashboard 的指标和 Hive 表列字段及 System Cube 中维度/度量列的关系
测试前环境、数据集的准备工作:2.2 中的第 3、4 条中的数据集和查询集,这也是比较难构建的