Slipstream中的无限滑动窗口(Infinite Window)

       滑动窗口中有一个特例是无限滑动窗口——它的窗口长度为无限长(INFINITE)。它的意思是,窗口每滑动一个间隔会触发一次计算,但是每次触发计算的窗口都会包含所有之前的窗口覆盖的区间。例如:对于窗口长度为 INFINITE,滑动间隔为1s的滑动窗口,第一个窗口为[0s, 1s),第二个窗口为[0s, 2s),第三个窗口为[0s, 3s),依次类推。

1、无限滑动窗口测试举例

无限滑动窗口也可以分别使用系统时间和事件时间进行切分,这里以系统时间切分为例举例说明,事件时间切分与之类似。

  • 创建一个输入流,用于接收Kafka传过来的数据
CREATE STREAM aaa (id STRING, letter STRING)

  ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

  TBLPROPERTIES("topic"="yxy",

  "kafka.zookeeper"="node3:2181,node2:2181,node1:2181",

  "kafka.broker.list"="node3:9092,node2:9092,node1:9092",

  "transwarp.consumer.security.protocol"="SASL_PLAINTEXT",

  "transwarp.consumer.sasl.mechanism"="GSSAPI",

  "transwarp.consumer.sasl.kerberos.service.name"="kafka",

  "transwarp.consumer.sasl.jaas.config"="com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab=\"/etc/slipstream1/conf/kafka.keytab\" principal=\"kafka@TDH\""

  );
  • 创建一个Window Stream
create stream bbb as select * from aaa STREAMWINDOW w1 AS (LENGTH INFINITE SLIDE '30' SECOND);

流bbb为无限滑动窗口,每隔30秒统计一次数据。

  • 创建表ccc,用于接收经过处理的流数据
CREATE TABLE ccc (letter STRING, sl STRING);
  • 触发一个聚合操作,按照“letter”分组,统计不同letter出现的次数
INSERT into ccc SELECT letter, count(*) as sl FROM bbb GROUP BY letter;

  • 测试

启动Kafka生产者生产数据:

查询得到表ccc中的数据如下:

30秒之后再Kafka中再次输入数据:

查询得到表ccc中的数据如下:

注意:在使用Window Stream进行聚合的时候,最好先建一个Window Stream,然后再进行聚合。

2、无限滑动窗口聚合存在的问题

       无限滑动窗口解决了对流传输过来所有数据无法进行聚合操作的问题,但是在一定时间内将聚合后的数据插入到表中时却不能实现覆盖原先表中的数据。在事件驱动模式(Slipstream有微批模式和事件驱动模式两种,TDH 5.0之后的版本默认开启事件驱动模式,可以在8180监控界面的ngmr.engine.mode参数项下设置参数,morphling为事件驱动模式,mapred为微批模式,推荐使用事件驱动模式)下,将存储结果数据的表建成es表或HBase表,因为其索引或rowkey的唯一性,可以实现数据的覆盖插入。

       这里以es表为例进行说明。

同1中相同,在建表的时候将表建成es表,如下:

CREATE TABLE ccc (letter STRING, sl STRING) stored as ES with shard number 8 replication 1;

触发聚合操作,并开启Kafka生产者生产数据:

查询表ccc可得:

继续生产数据:

一段时间后查询表ccc可得:

通过建es表,实现了数据的覆盖插入。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

象在舞

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值