Flink中的window知识体系与scala完整案例
[1]中得到大类,插图来自[2]
窗口大类(官方) | 子分类 | 数据是否在窗口之间重叠 |
Time Windows | Tumbling Windows | |
Sliding Windows | ||
Count Windows | 到达指定数量的单词才进行统计 |
多用户窗口[4] | 窗口范围 |
sessionwindow | |
globalwindow |
GlobalWindow的用法参考[7]
GlobalWindow和 WindowAll的区别是WindowAll 算子:并行度始终为1[8]
上述是来自官方文档的分类,来看下[9]的分类
#################################################################################
缺少windowall的图示
################################下面是乱入的小知识和本文无关#####################################
Physical Partitioning
1、Custom
2、Random
3、Rebalancing
4、Rescaling
5、BroadCasting
#################################################################################################
窗口还可以划分为 Keyed Window与Non-Keyed Window
实际例子是?
参考[5]来使用,注意找下图示
#################################Tumbling Window(滚动窗口,一个窗口参数)使用#####################
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Timeobject WindowedStreamingWordCount {def main(args: Array[String]) {val env = StreamExecutionEnvironment.getExecutionEnvironment// create a stream using socketval socketStream = env.socketTextStream("localhost",9999)// implement word countval wordsStream = socketStream.flatMap(value => value.split("\\s+")).map(value => (value,1))val keyValuePair = wordsStream.keyBy(0).timeWindow(Time.seconds(15))val countStream = keyValuePair.sum(1)countStream.print()env.execute()}}
该窗口只会计算从当前计时开始的15秒内的数据
#############################Sliding Window(滑动窗口,两个窗口参数)使用#################################
package com.madhukaraphatak.flink.streaming.examplesimport org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Timeobject WindowExample {def main(args: Array[String]) {val env = StreamExecutionEnvironment.getExecutionEnvironmentval source = env.socketTextStream("localhost",9000)//word mapval values = source.flatMap(value => value.split("\\s+")).map(value => (value,1))val keyValue = values.keyBy(0)//tumbling window : Calculate wordcount for each 15 seconds// val tumblingWindow = keyValue.timeWindow(Time.seconds(15))// // sliding window : Calculate wordcount for last 5 secondsval slidingWindow = keyValue.timeWindow(Time.seconds(15),Time.seconds(5))//count window : Calculate for every 5 recordsval countWindow = keyValue.countWindow(5)//tumblingWindow.sum(1).name("tumblingwindow").print()slidingWindow.sum(1).name("slidingwindow").print()// countWindow.sum(1).name("count window").print()env.execute()}}
需要定义两个参数,分别是:
①窗口的大小
②在窗口中滑动的大小,但理论上讲滑动的大小不能超过窗口大小
##############################countWindow的使用###################################################
package com.madhukaraphatak.flink.streaming.examplesimport org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Timeobject WindowExample {def main(args: Array[String]) {val senv = StreamExecutionEnvironment.getExecutionEnvironmentval source = senv.socketTextStream("localhost",9999)//word mapval values = source.flatMap(value => value.split("\\s+")).map(value => (value,1))val keyValue = values.keyBy(0)//tumbling window : Calculate wordcount for each 15 secondsval tumblingWindow = keyValue.timeWindow(Time.seconds(15))// sliding window : Calculate wordcount for last 5 secondsval slidingWindow = keyValue.timeWindow(Time.seconds(15),Time.seconds(5))//count window : Calculate for every 5 recordsval countWindow = keyValue.countWindow(5)//tumblingWindow.sum(1).name("tumblingwindow").print()//slidingWindow.sum(1).name("slidingwindow").print()countWindow.sum(1).name("count window").print()senv.execute()}}
对应的start-scala-shell的remote模式(HA)中的代码如下:
val source = senv.socketTextStream("localhost",9999)val values = source.flatMap(value => value.split("\\s+")).map(value => (value,1))val keyValue = values.keyBy(0)val countWindow = keyValue.countWindow(5)countWindow.sum(1).name("count window").print()senv.execute()
nc -lk 9999
结果可以在Desktop的$FLINK_HOME/log/flink-appleyuchi-taskexecutor-3-Desktop.out找到
如何体现countwindow的特性呢?
在nc -lk的终端输入:
pku pku pku pku pku
tsinghua tsinghua tsinghua
定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类
tsinghua tsinghua
在结果终端输入:
(Python3.6) appleyuchi@Desktop:log$ grep -r pku
flink-appleyuchi-taskexecutor-2-Desktop.out:2> (pku,5)
(Python3.6) appleyuchi@Desktop:log$ grep -r tsinghua
(Python3.6) appleyuchi@Desktop:log$ grep -r tsinghua
flink-appleyuchi-taskexecutor-2-Desktop.out:1> (tsinghua,5)
发现没?如果tsinghua这个单词数量不超过5个,你就别想在flink-appleyuchi-taskexecutor-2-Desktop.out这个文件中看到结果,这也体现了CountWindow的特性,如果不超过指定数据,Flink拒绝统计
#########################下面的是sliding-countwindow(滑动计数窗口)########################
代码来自[6]
自己運行後的代碼在:
https://gitee.com/appleyuchi/Flink_Code
sliding-count同樣存在重疊(由窗口長度決定),但是這裏聚合數據的維度是接受的數據數量,而不是等待時間.
##############################################################################################
Reference:
[1]Introduction to Flink Streaming - Part 5 : Window API in Flink
[2]Tumbling Windows和Sliding Windows区别与联系
[3]Introduction to Flink Streaming - Part 2 : Discretization of Stream using Window API
[4]Flink之窗口的使用
[5]Apache Flink:Keyed Window与Non-Keyed Window
[6]Flink countWindow 使用
[7]flink的datastream进行join操作没有输出结果一例
[8]Flink的Window与WindowAll 算子对比
[9]Flink Window介绍
Flink中的window知识体系与scala完整案例相关推荐
- 彻底搞清 Flink 中的 Window 机制
[CSDN 编者按]Window是处理无限流的核心.Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理.Flink提 ...
- 彻底搞清Flink中的Window(Flink版本1.8)
flink-window 窗口 在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理.当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分 ...
- Flink中GroupWindow和OverWindow各自的作用+window体系+文档阅读方式
GroupWindow和OverWindow各自的作用 Flink Window 作用 完整实例 GroupWindow 对window中的数据按照字段进行分组 完整案例 OverWindow 在整个 ...
- 构建自己的碎片知识体系
构建自己的碎片知识体系 2020 年已经收尾,回顾自己从事计算机视觉工作已六年有余,在 CSDN 上记录笔记亦三年有余.在这个以快速迭代和 996 著称的行业里,大量的碎片知识分布于我们每一天的工作中 ...
- 怎样形成计算机知识体系,打牢基础,形成网络化知识体系
原文作者:相阳 千万不要一味地追求所谓能力的提高,尤其是和高考关联不大的能力,而忽视了最为基础的"得分手段". 网络化知识体系的搭建在高考中的作用是不言而喻的,因为高考不会考查你单 ...
- java知识体系整理【2020-04-17】
工作也好几年了,平时工作比较杂(公司部门业务本身跨度就很大,从dsp.mcu.arm.qt.移动开发.一直到服务器),先将java部分总结下,感觉java的知识体系还是比较完整的,从事java开发(偏 ...
- 五万字 | Flink知识体系保姆级总结
本文目录: 一.Flink简介 二.Flink 部署及启动 三.Flink 运行架构 四.Flink 算子大全 五.流处理中的 Time 与 Window 六.Flink 状态管理 七.Flink 容 ...
- 【大数据】带你理解并使用flink中的Time、Window(窗口)、Windows Function(窗口函数)
提醒:本文的示例代码基于flink1.13,在讲window的使用时也会说明flink版本一些api的弃用情况. 文章目录 一.Time的简介 二.Window的概念 三.Window的类型 1.分类 ...
- 在过程中要正式批准可交付成果_干货!软考高项项目管理知识体系5大过程组47个过程...
现在应该很多小伙伴都在紧张的复习软考中,为了让大家更加高效的复习,今天给大家分享软考高级信息系统项目管理师的考试重点,项目管理知识体系的5大过程组47个过程. 考高项的朋友都知道,47个过程是非常重要 ...
最新文章
- 国内数十位大佬合作,综述预训练模型的过去、现在与未来
- JavaSE_坚持读源码_ClassLoader对象_Java1.7
- 人脸扫描建模_人脸识别智能锁安全吗?
- GreenDao3.2简单使用
- mysql after 不起作用_我的MySQL触发器不起作用,语法简单,不复杂
- html input font size,在移动端中Input大小随着font-size而变化
- 工作实践 之 Google Guava 工具集的使用 ,提高效率
- 排序算法系列之归并排序
- 解决Win7系统没有声音 麦克无声等问题
- 【C++笔记】构造函数与析构函数相关知识
- 谷粒商城:12.仓储服务 — 仓库管理
- Java Jna调用Dll动态库函数读写IC卡
- ae 的动画导出为html,Bodymovin v5.5.5 AE脚本可以导出json格式在Web动画制作工具
- 你还不知道web自动化测试是什么吧?今天让你发现新大陆
- 环境化学试题及答案大全
- 金融市场数据平台的架构设计之道
- AutoCAD参照编辑期间不允许使用 SAVE 命令怎么办
- 运维学习 unit 5 用户的建立与管理
- linux中fflush函数和printf函数 【转】
- 杰里之主动降噪与物理降噪的区别【篇】