第3章

增量?构建

第2章介绍了如何构建Cube并利用其完成在线多维分析的查询。每次Cube的构建都会从Hive中批量读取数据,而对于大多数业务场景来说,Hive中的数据处于不断增长的状态。为了支持Cube中的数据能够不断地得到更新,且无需重复地为已经处理过的历史数据构建Cube,因此对于Cube引入了增量构建的功能。

我们将Cube划分为多个Segment,每个Segment用起始时间和结束时间来标志。Segment代表一段时间内源数据的预计算结果。在大部分情况下(例外情况见第4章“流式构建”),一个Segment的起始时间等于它之前那个Segment的结束时间,同理,它的结束时间等于它后面那个Segment的起始时间。同一个Cube下不同的Segment除了背后的源数据不同之外,其他如结构定义、构建过程、优化方法、存储方式等都完全相同。

本章将首先介绍如何设计并创建能够增量构建的Cube,然后介绍实际测试或生产环境中触发增量构建的方法,最后将会介绍如何处理由于增量构建而导致的Segment碎片,以保持Kylin的查询性能。


3.1 为什么要增量构建


全量构建可以看作增量构建的一种特例:在全量构建中,Cube中只存在唯一的一个Segment,该Segment没有分割时间的概念,因此也就没有起始时间和结束时间。全量构建和增量构建各有其适用的场景,用户可以根据自己的业务场景灵活地进行切换。全量构建和增量构建的详细对比如表3-1所示。

表3-1 全量构建和增量构建的对比

全量构建 增量构建

每次更新时都需要更新整个数据集 每次只对需要更新的时间范围进行更新,因此离线计算量相对较小

查询时不需要合并不同Segment的结果 查询时需要合并不同Segment的结果,因此查询性能会受到影响

不需要后续的Segment合并 累计一定量的Segment之后,需要进行合并

适合小数据量或全表更新的Cube 适合大数据量的Cube

对于全量构建来说,每当需要更新Cube数据的时候,它不会区分历史数据和新加入的数据,也就是说,在构建的时候会导入并处理所有的原始数据。而增量构建只会导入新Segment指定的时间区间内的原始数据,并只对这部分原始数据进行预计算。为了验证这个区别,可以到Kylin的Monitor页面观察构建的第二步——创建Hive中间表(Create Intermediate Flat Hive Table),单击纸张形的LOG按钮即可观察该步骤的参数:

INSERT OVERWRITE TABLE

kylin_intermediate_test_kylin_cube_without_slr_left_join_desc_20120601000000_20130101000000 SELECT

TEST_KYLIN_FACT.CAL_DT

,TEST_KYLIN_FACT.LEAF_CATEG_ID

,TEST_KYLIN_FACT.LSTG_SITE_ID

,TEST_CATEGORY_GROUPINGS.META_CATEG_NAME

,TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME

,TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME

,TEST_KYLIN_FACT.LSTG_FORMAT_NAME

,TEST_KYLIN_FACT.SLR_SEGMENT_CD

,TEST_KYLIN_FACT.PRICE

,TEST_KYLIN_FACT.ITEM_COUNT

,TEST_KYLIN_FACT.SELLER_ID

,TEST_SITES.SITE_NAME

FROM DEFAULT.TEST_KYLIN_FACT as TEST_KYLIN_FACT

LEFT JOIN EDW.TEST_CAL_DT as TEST_CAL_DT

ON TEST_KYLIN_FACT.CAL_DT = TEST_CAL_DT.CAL_DT

LEFT JOIN DEFAULT.TEST_CATEGORY_GROUPINGS as TEST_CATEGORY_GROUPINGS

ON TEST_KYLIN_FACT.LEAF_CATEG_ID = TEST_CATEGORY_GROUPINGS.LEAF_CATEG_ID AND TEST_KYLIN_FACT.LSTG_SITE_ID = TEST_CATEGORY_GROUPINGS.SITE_ID

LEFT JOIN EDW.TEST_SITES as TEST_SITES

ON TEST_KYLIN_FACT.LSTG_SITE_ID = TEST_SITES.SITE_ID

LEFT JOIN EDW.TEST_SELLER_TYPE_DIM as TEST_SELLER_TYPE_DIM

ON TEST_KYLIN_FACT.SLR_SEGMENT_CD = TEST_SELLER_TYPE_DIM.SELLER_TYPE_CD

WHERE (TEST_KYLIN_FACT.CAL_DT >= '2012-06-01' AND TEST_KYLIN_FACT.CAL_DT < '2013-01-01')

distribute by rand();

该构建任务对应于名为test_kylin_cube_without_slr_left_join_empty的Cube构建,其Seg-ment所包含的时间段为从2012-06-01(包含)到2013-01-01(不包含),可以看到在导入数据的Hive命令中带入了包含这两个日期的过滤条件,以此保证后续构建的输入仅包含2012-06-01到2013-01-01这段时间内的数据。这样的过滤能够减少增量构建在后续的预计算中所需要处理的数据规模,有利于减少集群的计算量,加速Segment构建的时间。

其次,增量构建的Cube和全量构建的Cube在查询时也有不同。对于增量构建的Cube,由于不同时间的数据分布在不同的Segment之中,因此为了获得完整的数据,查询引擎需要向存储引擎请求读取各个Segment的数据。当然,查询引擎会根据查询中的条件自动跳过不感兴趣的Segment。对于全量构建的Cube,查询引擎只需要向存储引擎访问单个Segment所对应的数据,从存储层返回的数据无需进行Segment之间的聚合,但是这也并非意味着查询全量构建的Cube不需要查询引擎做任何额外的聚合,为了加强性能,单个Segment的数据也有可能被分片存储到引擎的多个分区上(参考第6章),从而导致查询引擎可能仍然需要对单个Segment不同分区的数据做进一步的聚合。当然,整体来说,增量构建的Cube上的查询会比全量构建的做更多的运行时聚合,而这些运行时聚合都发生在单点的查询引擎之上,因此通常来说增量构建的Cube上的查询会比全量构建的Cube上的查询要慢一些。

可以看到,日积月累,增量构建的Cube中的Segment越来越多,根据上一段的分析可以猜测到该Cube的查询性能也会越来越慢,因为需要在单点的查询引擎中完成越来越多的运行时聚合。为了保持查询性能,Cube的管理员需要定期地将某些Segment合并在一起,或者让Cube根据Segment保留策略自动地淘汰那些不会再被查询到的陈旧Segment。关于这部分的详细内容会在3.4.1节中展开详细讨论。

最后,我们可以得到这样的结论:对于小数据量的Cube,或者经常需要全表更新的Cube,使用全量构建需要更少的运维精力,以少量的重复计算降低生产环境中的维护复杂度。而对于大数据量的Cube,例如,对于一个包含两年历史数据的Cube,如果需要每天更新,那么每天为了新数据而去重复计算过去两年的数据就会变得非常浪费,在这种情况下需要考虑使用增量构建。

Apache Kylin权威指南3.1 为什么要增量构建相关推荐

  1. 【读书笔记】数据仓库- Apache Kylin权威指南

    Apache Kylin权威指南(第2版) ◆ 1.2.1 为什么要使用Apache Kylin 它们的主要技术是"大规模并行处理"(Massively Parallel Proc ...

  2. Apache Kylin权威指南1.3 Apache Kylin的工作原理

    1.3 Apache Kylin的工作原理 Apache Kylin的工作原理本质上是MOLAP(Multidimensional Online Analytical Processing)Cube, ...

  3. 《Gradle权威指南》--Android Gradle多项目构建

    No1: Android多项目设置 目录结构: MyProject/ setting.gradle app/ build.gradle libraries/ lib1/ build.gradle li ...

  4. Apache Kylin新手入门指南

    Apache Kylin新手入门指南 文章目录 Apache Kylin新手入门指南 1 Apache Kylin是什么 2 为什么使用Apache Kylin 3 Apache Kylin的易用性如 ...

  5. 一文读懂Apache Kylin(麒麟)

    "麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...

  6. 一文读懂Apache Kylin

    感谢分享. http://www.jianshu.com/p/abd5e90ab051?utm_campaign=maleskine&utm_content=note&utm_medi ...

  7. Apache Kylin(一)

    文章摘自<Apache Kylin 权威指南> 一.概述 Apache Kylin 是Hadoop大数据平台上的一个开源的联机分析处理(OLAP)引擎.它采用多维立方体预计算技术,将大数据 ...

  8. 5000 字带你快速入门 Apache Kylin

    01 什么是 Kylin Apche Kylin 是 Hadoop 大数据平台上的一个开源 OLAP 引擎.它采用多维立方体(Cube)预计算技术,可以将某些场景下的大数据 SQL 查询速度提升到亚秒 ...

  9. Apache Kylin

    "麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...

  10. Apache Kylin 是什么?

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见1000个问题搞定大数据技 ...

最新文章

  1. 5G时代下,AI赋能行业的思考
  2. 在听伏尔加纤夫曲 超酷
  3. Wannafly挑战赛17 - 求值2 (逆元 + 杨辉三角公式)
  4. ​Linux CPU 性能优化指南
  5. 2 Python 介绍
  6. apache php日志配置,如何设置apache每天保存日志
  7. 美国著名核物理学家,前半生为美国造核弹,后半生为中国放牛
  8. python并行计算_Python并行计算初探
  9. 基于Docker搭建Jumpserver堡垒机操作实践
  10. 用U盘安装Windows系统操作步骤
  11. 接呀呀云实时语音SDK总结
  12. java基础复习——day18(Stream流 ; 反射)
  13. 蓄水池采样算法的python实现_蓄水池抽样算法(Reservoir Sampling)
  14. r语言做绘制精美pcoa图_如何绘制精美的PCoA图形
  15. 用计算机做图画ppt,用计算机画图课件.ppt
  16. FVCOM 环境基础配置(1) intel编译器 下载与安装
  17. CCS 修改字体大小
  18. win7 热点设置命令
  19. 非抢占式多级反馈队列调度算法 C++实现
  20. [生存志] 第46节 秦穆公任贤霸西戎

热门文章

  1. scau 8633 回文划分
  2. C语言 SDK编程之通用控件的使用--ListView
  3. C盘空间太小,建议删除如下文件以释放空间!
  4. python+selenium+chrome driver 64位环境配置
  5. 哈夫曼树Huffman
  6. 编程大讲坛:C#核心开发技术从入门到精通pdf
  7. 数据库JDBC的基本内容
  8. oracle单行函数 之 字符函数
  9. getchar()不停止原因
  10. MMO游戏技能攻击区域的计算2--给地图划分格子