Apache Kylin权威指南2.4 构建Cube

Apache Kylin权威指南2.4 构建Cube

大家好,又见面了,我是全栈君。

2.4 构建Cube


本节将快速介绍构建Cube相关的操作说明和设置,因受到篇幅的限制,许多具体内容无法深入展开,读者可以从后续的第3章和第4章中获得更详细的介绍。

新创建的Cube只有定义,而没有计算的数据,它的状态是“DISABLED”,是不会被查询引擎挑中的。要想让Cube有数据,还需要对它进行构建。Cube的构建方式通常有两种:全量构建和增量构建;两者的构建步骤是完全一样的,区别只在于构建时读取的数据源是全集还是子集。

Cube的构建包含如下步骤,由任务引擎来调度执行。

1)创建临时的Hive平表(从Hive读取数据)。

2)计算各维度的不同值,并收集各Cuboid的统计数据。

3)创建并保存字典。

4)保存Cuboid统计信息。

5)创建HTable。

6)计算Cube(一轮或若干轮MapReduce)。

7)将Cube的计算结果转成HFile。

8)加载HFile到HBase。

9)更新Cube元数据。

10)垃圾回收。

以上步骤中,前5步是为计算Cube而做的准备工作,例如遍历维度值来创建字典,对数据做统计和估算以创建HTable等;第6)步是真正的Cube计算,取决于所使用的Cube算法,它可能是一轮MapReduce任务,也可能是N(在没有优化的情况下,N可以被视作是维度数)轮迭代的MapReduce。由于Cube运算的中间结果是以SequenceFile的格式存储在HDFS上的,所以为了导入到HBase中,还需要第7)步将这些结果转换成HFile(HBase文件存储格式)。第8)步通过使用HBase BulkLoad工具,将HFile导入进HBase集群,这一步完成之后,HTable就可以查询到数据了。第9)步更新Cube的数据,将此次构建的Segment的状态从“NEW”更新为“READY”,表示已经可供查询了。最后一步,清理构建过程中生成的临时文件等垃圾,释放集群资源。

Monitor页面会显示当前项目下近期的构建任务。图2-19显示了一个正在运行的Cube构建的任务,当前进度为46%多。

 

图2-19 任务列表

单击任务右边的“”按钮,展开可以得到任务每一步的详细信息,如图2-20所示。

如果任务中的某一步是执行Hadoop任务的话,那么会显示Hadoop任务的链接,单击即可跳转到对应的Hadoop任务监测页面,如图2-21所示。

如果任务执行中的某一步出现报错,那么任务引擎会将任务状态置为“ERROR”并停止后续的执行,等待用户排错。在错误排除之后,用户可以单击“Resume”从上次失败的地方恢复执行。或者如果需要修改Cube或重新开始构建,那么用户需要单击“Discard”来丢弃此次构建。

接下来将介绍几种不同的构建方式。

 

图2-21 MapReduce任务监测页面

2.4.1 全量构建和增量构建

1.?全量构建

对数据模型中没有指定分割时间列信息的Cube,Kylin会采用全量构建,即每次从Hive中读取全部的数据来开始构建。通常它适用于以下两种情形。

事实表的数据不是按时间增长的。

事实表的数据比较小或更新频率很低,全量构建不会造成太大的开销。

2.?增量构建

增量构建的时候,Kylin每次都会从Hive中读取一个时间范围内的数据,然后进行计算,并以一个Segment的形式进行保存。下次再构建的时候,会自动以上次结束的时间为起点时间,再选择新的终止时间进行构建。经过多次构建,Cube中将会有多个Segment依次按时间顺序进行排列,如Seg-1, Seg-2,…,Seg-N。查询的时候,Kylin会查询一个或多个Segment然后再做聚合计算,以便返回正确的结果给请求者。

使用增量构建的好处是,每次只需要对新增数据进行计算,从而避免了对历史数据进行重复计算。对于数据量很大的Cube,使用增量构建是非常有必要的。

图2-22是构建一个Segment的Cube时的输入框,需要用户选择时间范围。

 

图2-22 提交增量构建

在从Hive读取源数据的时候,Kylin会带上此时间条件,如图2-23所示。

 

图2-23 增量构建的SQL

增量构建抽取数据的范围,采用了前包后闭的原则,即包含了开始时间,但不包含结束时间,从而保证上一个Segment的结束时间与下一个Segment的起始时间相同,但数据不会重复。

下一次构建的时候,起始时间必须是上一次的结束时间。如果使用Kylin的Web GUI触发,那么起始时间会被自动填写,用户只需要选择结束时间。如果使用Rest API触发,用户则需要确保时间范围不会与已有的Segment有重合。

2.4.2 历史数据刷新

Cube构建完成以后,如果某些历史数据发生了改动,那么需要针对相应的Segment进行重新计算,这种构建称为刷新。刷新通常只针对增量构建的Cube而言,因为全量构建的Cube只要重新全部构建就可以得到更新;而增量更新的Cube因为有多个Segment,因此需要先选择要刷新的Segment,然后再进行刷新。

图2-24是提交刷新的请求页面,用户需要在下拉列表中选择一个时间区间。

 

图2-24 刷新已有的Segment

提交以后,生成的构建任务与最初的构建任务完全一样。

在刷新的同时,Cube仍然可以被查询,只不过返回的是陈旧数据。当Segment刷新完毕时,新的Segment会立即生效,查询开始返回最新的数据。老Segment则成为垃圾,等待回收。

2.4.3 合并

随着时间的迁移,Cube中可能会存在较多数量的Segment,使得查询性能下降,并且会给HBase集群管理带来压力。对此,需要适时地将一些Segment进行合并,将若干个小Segment合并成较大的Segment。

合并的好处具体如下。

合并相同的Key,从而减少Cube的存储空间。

由于Segment减少了,因此可以减少查询时的二次聚合,提高了查询性能。

HTable的数量得以减少,更便于集群的管理。

下面来看看合并的操作步骤,图2-25中的Cube有两个Segment。

现在触发一个合并,单击Actions →Merge;选择要合并的起始Segment和结束Segment,生成一个合并的任务,如图2-26所示。

 

图2-26 提交合并任务

合并的时候,Kylin将直接以当初各个Segment构建时生成的Cuboid文件作为输入内容,而不需要从Hive加载原始数据。后续的步骤跟构建时基本一致。直到新的HTable加载完成后,Kylin才会卸载旧的HTable,从而确保在整个合并过程中,Cube都是可以查询的。

合并完成之后,此Cube的Segment减少为1个,如图2-27所示。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108545.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 时间序列预测——双向LSTM(Bi-LSTM)「建议收藏」

    时间序列预测——双向LSTM(Bi-LSTM)「建议收藏」  本文展示了使用双向LSTM(Bi-LSTM)进行时间序列预测的全过程,包含详细的注释。整个过程主要包括:数据导入、数据清洗、结构转化、建立Bi-LSTM模型、训练模型(包括动态调整学习率和earlystopping的设置)、预测、结果展示、误差评估等完整的时间序列预测流程。  本文使用的数据集在本人上传的资源中,链接为mock_kaggle.csv代码如下:importpandasaspdimportnumpyasnpimportmathimportkerasfromma

  • 【动画教程】真封神南极服务端2.52架设第三集[通俗易懂]

    【动画教程】真封神南极服务端2.52架设第三集[通俗易懂]官方网站www.zfs2014.com动画名称:真封神南极服务端2.52架设第三集主讲人:diablo2208教程下载地址:http://pan.baidu.com/s/1c0GfyMk

  • android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」

    android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」AndroidStudio运行按钮灰色的完美解决方法今天新建项目的时候突然发现编译后运行按钮为灰色。解决方案:第一步:点击图中的AddConfiguration,出来如下界面第二步:点+号,并选择AndroidApp选项出来下图所示界面第三步:在Module中下拉框中选择app如果在Module下拉框没有app这个选项点击搜索框,输入sync,从搜索结果中选择如下项:点击运行…

  • termux基本使用教程[通俗易懂]

    termux基本使用教程[通俗易懂]更新与https://lruihao.cn/termux1.html前面有一篇文章写到一些传送门初始化下载并初始化termux安装vim安装编辑器vimpkginstallvim解决中文乱码问题在home目录下,新建.vimrc文件vim.vimrc添加内容如下:setfileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom…

  • socketpair原理_socket负载均衡

    socketpair原理_socket负载均衡描述先看下传统的CS模型,如下:总是一方发起请求,等待另一方回应。当一次传输完成之后,client端发起新的请求之后,server端才作出回应。那如何才能做到双向通信? 一种解决办法就是client端即使client,又是server,server端即使client也是server,如下:但是上述方面比较复杂,这时候就引入要分析的socketpair了。

    2022年10月14日
  • ubuntu读取can口数据_嵌入式Linux下CAN接口调试[通俗易懂]

    ubuntu读取can口数据_嵌入式Linux下CAN接口调试[通俗易懂]ByToradex秦海1).简介CAN(ControllerAreaNetwork)总线是嵌入式设备最为常用的接口之一,常用于汽车以及工业自动化等嵌入式领域,因此本文就基于嵌入式Linux演示使用CAN总线进行通讯测试。本文所演示的平台来自于ToradexColibriiMX6DL和ApalisiMX6DARM嵌入式平台,这两个平台是都是基于NXPiMX6系列ARM处理器,支持双…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号