Flink作业骨架结构

devtools/2024/10/18 1:41:31/

前言

Flink 是大数据流计算引擎,开发者通过程序语言开发一个 Flink 作业,然后提交这个作业到服务端并执行,以完成对大数据流的处理。

Flink 作业有一个基本骨架,再复杂的 Flink 作业都离不开这个基本骨架,了解作业的基本骨架有助于我们更快上手 Flink 作业的开发。

骨架结构

Flink 作业的基本骨架包含三个部分:

  • 创建Flink执行环境
  • 定义数据处理逻辑
  • 提交并执行Flink作业

创建Flink执行环境

Flink 执行环境被封装成 StreamExecutionEnvironment 对象,通过该对象,我们可以给Flink作业添加数据源、添加数据处理和输出逻辑、配置Flink作业的并行度、故障重启策略等参数。

定义数据处理逻辑

Flink是大数据流计算引擎,本质上是对大数据的计算处理,那么首先要解决的问题是:数据从哪儿来?

解决这个问题,就是给Flink作业定义数据源,数据源被抽象成了 SourceFunction 接口,实现该接口重写 run 方法即可接收数据。

有了数据,接下来就是声明要对这些数据做哪些处理?对数据的处理被抽象成了 ProcessFunction 接口,实现该接口重写 processElement 方法即可处理一条条数据。常见的数据处理操作有:过滤、转换、聚合等。

数据计算以后,还需要把计算结果给保存下来,所以最后还需要一步数据汇 sink 操作,把计算结果保存到数据存储引擎,例如写入MySQL、Redis等存储引擎。

提交并执行Flink作业

到目前为止,我们只描述了Flink的数据处理逻辑,Flink作业不手动触发的前提下,是不会自动执行的。

所以最后,如果要让上述流程跑起来,还需要手动提交并触发Flink作业。开发环境下,可以直接在本地提交并执行,生产环境一般是提交到Flink集群执行。

执行Flink作业,对应的是 StreamExecutionEnvironment#execute 方法。

字数统计作业

这里以一个统计字数作业作为示例,它被称作是 Flink 版的 Hello World,虽然简单,但是很好的体现了 Flink 作业的流程。

如下代码所示,我们先是创建了Flink作业执行环境对象 StreamExecutionEnvironment,然后定义了数据源监听本地的8888端口读取文本数据。紧接着定义数据处理逻辑,先是过滤操作,只有接收到的字符串是单个英文字母时才处理,然后把单个英文字母映射为WordCount对象,用于统计次数。然后是根据英文字母分组,相同的字母会被分到同一组,最后统计所有相同字母的 count 字段,得到的结果就是字母出现的次数。最终的 sink 操作只是简单的把结果输出到控制台。

public class WordCountJob {public static void main(String[] args) throws Exception {// 创建Flink执行环境StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();// 1. 定义数据源 从Socket读取数据environment.socketTextStream("127.0.0.1", 8888)// 2. 定义数据处理逻辑// 2.1 过滤 接收到的数据必须是英文字母.filter(e -> e.length() == 1 && Character.isLetter(e.codePointAt(0)))// 2.2 映射 单个字符映射成WordCount对象.map(e -> new WordCount(e.toUpperCase(), 1))// 2.3 分组 相同字母分为一组.keyBy(WordCount::getWord)// 2.4 分组后相同字母聚合求和.sum("count")// 3. 定义数据汇sink 这里输出到控制台.addSink(new SinkFunction<WordCount>() {@Overridepublic void invoke(WordCount value, Context context) throws Exception {System.err.println(value.word + ":" + value.count);}});// 执行Flink作业environment.execute();}@Data@AllArgsConstructor@NoArgsConstructorpublic static class WordCount {public String word;public int count;}
}

Flink 作业启动时,就会去连接本地的8888端口,如果连接不上,会报错退出。所以启动作业前,需要先保证8888端口开启。所以Mac系统下先打开8888端口:

nc -l 8888

然后启动 Flink 作业,此时控制台什么也没有,因为数据源没有数据,Flink也就没法处理。然后我们往 8888 端口写点东西

nc -l 8888
1
a
b
c
a

控制台输出

A:1
B:1
C:1
A:2

分析一下结果,第一次发出的“1”,因为不是英文字母,所以会被filter算子过滤掉。发出第一个“a”时,因为符合条件,所以会被后续所有算子处理,最终到达sink算法,输出到控制台。发出第二个“a"时,因为之前已经有一个a了,所以sum算子求和结果是2。

尾巴

Flink作业的基本骨架包含三部分:创建作业执行环境、定义数据处理逻辑、提交并启动作业。执行环境主要用来对Flink作业进行一些设置,例如 故障重启策略、并行度等参数。定义数据处理逻辑是我们开发Flink作业最重要的部分,首先要定义数据源,告诉Flink数据从哪里来,然后声明要对数据做哪些处理,最终计算结果要保存到哪里等。Flink作业是懒执行的,前面的这些操作都只是对Flink作业的一个声明和描述,必须调用execute方法作业才会真正跑起来。


http://www.ppmy.cn/devtools/126601.html

相关文章

Linux查看处理器信息

目录 一、查看CPU信息 二、查看当前操作系统的缓存行大小 三、查看不同层次的缓存大小 四、查看内存信息 五、查看Linux内核版本&#xff0c;编译器版本 一、查看CPU信息 ~ # cat /proc/cpuinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd…

缓存区是什么

文章目录 前言一、数据传输二、异步操作三、性能优化四、大小和管理五、应用场景总结 前言 缓存区&#xff08;Buffer&#xff09;是计算机系统中用于临时存储数据的一块内存区域。它的主要作用是提高数据处理效率&#xff0c;解决生产者和消费者之间的速度差异。以下是缓存区…

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目&#xff0c;并将本游戏需要用到的图片素材 image…

南科大分享|大数据技术如何赋能大模型训练及开发

嘉宾介绍 张松昕&#xff0c;南方科技大学统计与数据科学系研究学者&#xff0c;UCloud 顾问资深算法专家&#xff0c;曾任粤港澳大湾区数字经济研究院访问学者&#xff0c;主导大模型高效分布式训练框架的开发&#xff0c;设计了 SUS-Chat-34B 的微调流程&#xff0c;登顶 Ope…

吴恩达深度学习笔记(6)

正交化 为了提高算法准确率&#xff0c;我们想到的方法 收集更多的训练数据增强样本多样性使用梯度下降将算法使算法训练时间更长换一种优化算法更复杂或者更简单的神经网络利用dropout 或者L2正则化改变网络框架更换激活函数改变隐藏单元个数 为了使有监督机制的学习系统良…

Python的pywt库的安装

目录 pywt库的全称是PyWavelets&#xff0c; https://pywavelets.readthedocs.io/en/latest/。 安装pywt库&#xff1a; pip install PyWavelets而不是VS2017中默认的pip install pywt&#xff0c;真是坑啊。 >>> import pywt>>> x [3, 7, 1, 1, -2, 5, 4…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

千兆超薄lan transformer H82412S应用主板英特尔光仟网卡

千兆超薄lan transformer H82412S应用主板英特尔光仟网卡&#xff1a;I992643OO38 网卡网络变压器应用广泛&#xff0c;但如何找到适合自己公司使用的产品&#xff0c;还真要对网络变压器有一定的了解才行&#xff0c;这节将和大家分享有关知识点&#xff0c;希望大家喜欢。一&…