【Apache Kylin】流式构建

流式构建

1.为什么要流式构建

实时数据更新是一种普遍的需求,快速分析变化趋势才能做出正确的决策。

2.准备流式数据

2.1数据格式

Kylin假设在流式构建中,数据是以数据流的形式传递给流式构建引擎的。消息流中的每条消息需要包含的信息有:所有的维度信息,所有的度量信息,业务时间戳。

2.2消息队列

Kafka因具有高可用性和可扩展性,被广泛地选择为实时消息队列。Kafka提供了两套读取访问接口:高层读取接口(High Level Consumer API)和底层读取接口(Simple Consumer API),由于需要直接控制读取队列的偏移量(Offset),因此这里选择了底层的读取接口。

流式构建的用户需要使用Kafka的Producer将数据源源不断地加入某个Topic中,并且将Kafka的一些基本信息告知流式构建任务。流式构建任务在启动的时候会启动Kafka客户端,然后根据配置项Kafka集群读取相应的Topic中的消息,并进行预处理计算。

2.3创建Schema

流失构建的问题是,数据是以键值对的形式传入消息队列的,不像Hive一样存在可以用来导入的表定义。由于消息队列中的键值对是基本固定的,因此可以创建一个虚拟的表,用表中的各个列对应消息队列中的维度、度量及衍生时间维度。

3.设计流式Cube

3.1创建Model

3.2创建Cube

4.流式构建原理

由于分布式网络存在延迟等因素,因此从消息队列中取出的消息并不一定必须要按照业务时间升序排列。Kylin假设消息队列中的所有消息均按照业务时间呈基本递增的趋势。

流式构建需要达到分钟级的数据更新频率,Kylin的做法是每隔数分钟就启动一次微构建,用于处理最新的一批数据。类似于Spark Streaming。使用一种变种的二分查找法来定位所需要读取的消息队列的起始序号和结束序号。

流式构建有数据量小、速度要求高的特点,它不从Hive中获取数据,而是提供了一个独立进程的内存流式构建引擎。它的工作方式为:调度器每隔一段时间(INTERVAL)就触发流式构建引擎开始工作,目的是构建一个新的Segment。在自动后,流式构建引擎会从消息队列中提取出一部分的消息。这些消息中有一些并不属于当前工作的Segment,因此需要一个过滤器将不需要的消息进行过滤。随后进入深层次的预计算中,流式构建引擎根据配置好的消息分析器,从每个消息中提取出有用的维度和度量。并结合配置从业务时间戳上衍生计算出所有需要的衍生时间维度。这些数据将按照Cube的设计被预计算,结果会被封装成一个新的Segment存到存储引擎中。

5.触发流式构建

5.1单次触发

Kylin目前不支持从Web GUI上触发流式构建。

5.2自动化多次触发

基于Crob Job的一种方案

5.3出错处理

5.3.1流式构建出错

如果出现Kafka读取出错的情况,可能会导致某个单次的微构建失败。

5.3.2合并出错

如果出现自动合并的构建出错的情况,它会阻碍所有其他的在这个Cube上的合并操作,因为一个Cube同时只允许有一个未完成的构建操作。出错的原因,往往在Hadoop集群本身上。

流式构建与增量构建的区别:主要区别在于数据源不同,前者的数据源是Kafka这样的消息队列,后者的数据源是Hive这样的数据仓库;另一个不同之处在于,增量构建是由MapReduce作业来产生Cube的HDFS数据文件的,它会使用MapReduce将HDFS数据文件转化为符合存储引擎(HBase)的数据格式(HFile),而在流式构建中,HDFS数据文件并不是由MapRedue产生的,而是由一个单进程的流式构建引擎独立完成的。因此,当数据量变大的时候,整个系统的出错率可能会增加。


参考资料:《Apache Kylin 权威指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镰刀韭菜

看在我不断努力的份上,支持我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值