前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原来Kylin的增量构建,大有学问!

原来Kylin的增量构建,大有学问!

作者头像
大数据梦想家
发布2021-01-27 16:13:47
7930
发布2021-01-27 16:13:47
举报

本篇博客,博主为大家介绍的是关于Kylin的增量构建的步骤过程,以及其与全量构建的差异对比!看完之后,相信你也一定能够感受到这里面的大学问~

在这里插入图片描述
在这里插入图片描述

Kylin增量构建

应用场景

Kylin在每次Cube的构建都会从Hive中批量读取数据,而对于大多数业务场景来说,Hive中的数据处于不断增长的状态。为了支持Cube中的数据能够不断地得到更新,且无需重复地为已经处理过的历史数据构建Cube,因此对于 Cube引入了增量构建的功能。

理解Cube、Cuboid与Segment的关系

Kylin将Cube划分为多个Segment(对应就是HBase中的一个表),每个Segment用起始时间和结束时间来标志。Segment代表一段时间内源数据的预计算结果。一个Segment的起始时间等于它之前那个Segment的结束时间,同理,它的结束时间等于它后面那个Segment的起始时间。同一个Cube下不同的Segment除了背后的源数据不同之外,其他如结构定义、构建过程、优化方法、存储方式等都完全相同

在这里插入图片描述
在这里插入图片描述

一个Cube,可以包含多个Cuboid,而Segment是指定时间范围的Cube,可以理解为Cube的分区。对应就是HBase中的一张表,该表中包含了所有的Cuboid。

例如:以下为针对某个Cube的Segment

Segment名称

分区时间

HBase表名

201910110000000-201910120000000

20191011

KYLIN_41Z8123

201910120000000-201910130000000

20191012

KYLIN_5AB2141

201910130000000-201910140000000

20191013

KYLIN_7C1151

201910140000000-201910150000000

20191014

KYLIN_811680

201910150000000-201910160000000

20191015

KYLIN_A11AD1

全量构建与增量构建

全量构建

在全量构建中,Cube中只存在唯一的一个Segment,该Segment没有分割时间的概念,也就没有起始时间和结束时间。全量构建和增量构建各有其适用的场景,用户可以根据自己的业务场景灵活地进行切换。对于全量构建来说,每当需要更新Cube数据的时候,它不会区分历史数据和新加入的数据,也就是说,在构建的时候会导入并处理所有的原始数据

在这里插入图片描述
在这里插入图片描述
增量构建

增量构建只会导入新Segment指定的时间区间内的原始数据,并只对这部分原始数据进行预计算。

全量构建和增量构建的对比

全量构建

增量构建

每次更新时都需要更新整个数据集

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

查询时不需要合并不同Segment的结果

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

不需要后续的Segment合并

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

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

适合大数据量的Cube

全量构建与增量构建的Cube查询方式对比:

  • 全量构建Cube

■ 查询引擎只需向存储引擎访问单个Segment所对应的数据,无需进行Segment之间的聚合

■ 为了加强性能,单个Segment的数据也有可能被分片存储到引擎的多个分区上,查询引擎可能仍然需要对单个Segment不同分区的数据做进一步的聚合

  • 增量构建Cube

■ 由于不同时间的数据分布在不同的Segment之中,查询引擎需要向存储引擎请求读取各个Segment的数据

■ 增量构建的Cube上的查询会比全量构建的做更多的运行时聚合,通常来说增量构建的Cube上的查询会比全量构建的Cube上的查询要慢一些。

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

在这里插入图片描述
在这里插入图片描述

增量构建Cube过程

1、指定分割时间列

增量构建Cube的定义必须包含一个时间维度,用来分割不同的Segment,这样的维度称为分割时间列(Partition Date Column)。

2、增量构建过程

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

增量Cube的创建

创建增量Cube的过程和创建普通Cube的过程基本类似,只是增量Cube会有一些额外的配置要求

1、配置Model

增量构建的Cube需要指定分割时间列。例如:将日期分区字段添加到维度列中

在这里插入图片描述
在这里插入图片描述
2、 设置日期范围

创建cube结束后,在build时设置计算数据的日期

在这里插入图片描述
在这里插入图片描述

注意事项

注意构建Cube时,选择的分区时间为,起始时间(包含)、结束时间(不保存),对应了从Hive从获取数据源的条件

3、查看Segment

第一天同步成功

在这里插入图片描述
在这里插入图片描述

接着我们想再计算下一个日期的数据

在这里插入图片描述
在这里插入图片描述

第二天同步成功

在这里插入图片描述
在这里插入图片描述

根据层量同步方案,得出一个结论

每天生成一个Segment,一年就有365个Segment。当用户查询时,系统不知道数据在哪个Segment中,所以需要扫描所有的Segment(扫描356个表),扫描多个表/多个Segment会降低数据查询效率。【增量方案带来的问题】

补充:文件越多效率越慢。 1个文件10G和10000个文件共10G 读取一个文件更快(寻址开销、频繁发开关闭) 一个文件夹内的文件特别多,这个文件夹打开的时间就会特别长。 当系统越来越慢,越来越慢,越来越慢,越来越慢,有可能是某一个目录中的数据没有及时的清空或删除。


总结

本篇博客为大家介绍了Kylin的增量构建与全量构建的差异与适用场景分析,并为演示了如何进行kylin的增量构建。在文末的时候已经提到,增量构建会导致Segment文件越来越多,最终影响到系统的性能。下一篇博客,我们就来讨论,如何解决这个问题~敬请期待!!!

如果以上过程中出现了任何的纰漏错误,烦请大佬们指正?

受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kylin增量构建
    • 应用场景
      • 理解Cube、Cuboid与Segment的关系
        • 全量构建与增量构建
          • 全量构建
          • 增量构建
          • 全量构建和增量构建的对比
        • 增量构建Cube过程
          • 增量Cube的创建
            • 1、配置Model
            • 2、 设置日期范围
            • 3、查看Segment
        • 总结
        相关产品与服务
        TDSQL MySQL 版
        TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档