flink 1.11.2 学习笔记(1)-wordCount
一、pom依赖

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.cnblogs.yjmyzz</groupId>
7 <artifactId>spring-boot-demo</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9
10 <properties>
11 <java.version>1.8</java.version>
12 <flink.version>1.11.2</flink.version>
13 </properties>
14
15 <dependencies>
16
17 <!--lombok可选-->
18 <dependency>
19 <groupId>org.projectlombok</groupId>
20 <artifactId>lombok</artifactId>
21 <version>1.18.12</version>
22 </dependency>
23
24 <!-- spring应用最小依赖-可选 -->
25 <dependency>
26 <groupId>org.springframework</groupId>
27 <artifactId>spring-context</artifactId>
28 <version>5.2.4.RELEASE</version>
29 </dependency>
30
31 <!-- flink -->
32 <dependency>
33 <groupId>org.apache.flink</groupId>
34 <artifactId>flink-core</artifactId>
35 <version>${flink.version}</version>
36 </dependency>
37
38 <dependency>
39 <groupId>org.apache.flink</groupId>
40 <artifactId>flink-java</artifactId>
41 <version>${flink.version}</version>
42 </dependency>
43
44 <dependency>
45 <groupId>org.apache.flink</groupId>
46 <artifactId>flink-scala_2.12</artifactId>
47 <version>${flink.version}</version>
48 </dependency>
49
50 <dependency>
51 <groupId>org.apache.flink</groupId>
52 <artifactId>flink-clients_2.12</artifactId>
53 <version>${flink.version}</version>
54 </dependency>
55
56 <dependency>
57 <groupId>org.apache.flink</groupId>
58 <artifactId>flink-test-utils-junit</artifactId>
59 <version>${flink.version}</version>
60 </dependency>
61 </dependencies>
62
63 <build>
64 <plugins>
65 <plugin>
66 <artifactId>maven-compiler-plugin</artifactId>
67 <version>3.1</version>
68 <configuration>
69 <source>1.8</source>
70 <target>1.8</target>
71 </configuration>
72 </plugin>
73
74 <!-- Scala Compiler -->
75 <plugin>
76 <groupId>net.alchim31.maven</groupId>
77 <artifactId>scala-maven-plugin</artifactId>
78 <version>4.4.0</version>
79 <executions>
80 <!-- Run scala compiler in the process-resources phase, so that dependencies on
81 scala classes can be resolved later in the (Java) compile phase -->
82 <execution>
83 <id>scala-compile-first</id>
84 <phase>process-resources</phase>
85 <goals>
86 <goal>compile</goal>
87 </goals>
88 </execution>
89 </executions>
90 <configuration>
91 <jvmArgs>
92 <jvmArg>-Xms128m</jvmArg>
93 <jvmArg>-Xmx512m</jvmArg>
94 </jvmArgs>
95 </configuration>
96 </plugin>
97
98 </plugins>
99 </build>
100
101 </project>
二、WordCount(批处理版本)

1 import org.apache.flink.api.common.functions.FlatMapFunction;
2 import org.apache.flink.api.java.DataSet;
3 import org.apache.flink.api.java.ExecutionEnvironment;
4 import org.apache.flink.api.java.tuple.Tuple2;
5 import org.apache.flink.util.Collector;
6
7 /**
8 * WordCount批处理版本
9 */
10 public class BatchWordCount {
11
12 public static void main(String[] args) throws Exception {
13
14 // 1 设置环境
15 final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
16
17 // 2. 定义数据
18 String wordFilePath = "/Users/jimmy/Downloads/word.txt";
19 DataSet<String> text = env.readTextFile(wordFilePath);
20
21 // 3. 处理逻辑
22 DataSet<Tuple2<String, Integer>> counts =
23
24 text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
25 @Override
26 public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
27 //将每行按word拆分
28 String[] tokens = value.toLowerCase().split("\\W+");
29
30 //收集(类似:map-reduce思路)
31 for (String token : tokens) {
32 if (token.length() > 0) {
33 out.collect(new Tuple2<>(token, 1));
34 }
35 }
36 }
37 })
38 //按Tuple2里的第0项,即:word分组
39 .groupBy(0)
40 //然后对Tuple2里的第1项求合
41 .sum(1);
42
43 // 4. 打印结果
44 counts.print();
45
46 }
47 }
注:数据文件/Users/jimmy/Downloads/word.txt的位置,大家可根据实际情况调整,该文件的内容类似:
hello java
hello flink
三、WordCount(流式处理版本)

1 import org.apache.flink.api.common.functions.FlatMapFunction;
2 import org.apache.flink.api.java.tuple.Tuple2;
3 import org.apache.flink.streaming.api.datastream.DataStream;
4 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
5 import org.apache.flink.util.Collector;
6
7 public class StreamWordCount {
8
9 public static void main(String[] args) throws Exception {
10 // 1 设置环境
11 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
12
13 // 2. 定义数据
14 DataStream<String> text = env.socketTextStream("127.0.0.1", 9999);
15
16 // 3. 处理逻辑
17 DataStream<Tuple2<String, Integer>> counts =
18
19 text.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
20 @Override
21 public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
22 //将每行按word拆分
23 String[] tokens = value.toLowerCase().split("\\b+");
24
25 //收集(类似:map-reduce思路)
26 for (String token : tokens) {
27 if (token.trim().length() > 0) {
28 out.collect(new Tuple2<>(token.trim(), 1));
29 }
30 }
31 }
32 })
33 //按Tuple2里的第0项,即:word分组
34 .keyBy(value -> value.f0)
35 //然后对Tuple2里的第1项求合
36 .sum(1);
37
38 // 4. 打印结果
39 counts.print();
40
41 // execute program
42 env.execute("Streaming WordCount");
43
44 }
45 }
注:运行前,先在终端命令行输入nc -l 9999,开启一个tcp server作为流式处理的数据源,然后再运行上面的代码,然后命令行输入一些文本,即可看到输出
flink 1.11.2 学习笔记(1)-wordCount的更多相关文章
- Linux(10.5-10.11)学习笔记
3.2程序编码 unix> gcc -01 -o p p1.c p2.c -o用于指定输出(out)文件名. -01,-02 告诉编译器使用第一级或第二级优化 3.2.1机器级代码 机器级编程两 ...
- 1-1 maven 学习笔记(1-6章)
一.基础概念 1.Maven作为Apache组织中颇为成功的开源项目,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理.从清理,编译,测试到生成报告,到打包部署,自动化构建过程. 还可以跨 ...
- (11)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Thrift高效通讯 (完结)
一. 什么是 RPC Restful 采用 Http 进行通讯,优点是开放.标准.简单.兼容性升级容易: 缺点是性能略低.在 QPS 高或者对响应时间要求苛刻的服务上,可以用 RPC(Remote P ...
- 1-1.flutter学习笔记(一)git入门(msysgit图文安装)
1.下载git-for-windows (1)常用的GitHub客户端msysgit,也就是git-for-windows. (2)登录官网 https://git-for-windows.githu ...
- c++11多线程学习笔记之一 thread基础使用
没啥好讲的 c++11 thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...
- 机器学习11—Apriori学习笔记
votesmart下载 https://pypi.python.org/pypi/py-votesmart test11.py #-*- coding:utf-8 import sys sys.pa ...
- 11.Laravel5学习笔记:扩展 Validator 类
简单介绍 在 Laravel5 中,本身已经提供了丰富的验证规则供我们使用,可是天下应用奇葩多,做为程序猿你会发现永远都有新的验证规则诞生,光是组合已经解救不了你的项目了.这个时候就须要我们扩展 Va ...
- c++11多线程学习笔记之四 生产消费者
#ifndef MY_QUEUE_H__ #define MY_QUEUE_H__ #include<list> #include<mutex> #include<thr ...
- c++11多线程学习笔记之三 condition_variable使用
从windows角度来说,condition_variable类似event. 阻塞等待出发,不过condition_variable可以批量出发. 代码如下: // 1111111.cpp : 定义 ...
- c++11多线程学习笔记之二 mutex使用
// 1111111.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include ...
随机推荐
- 【BUG】ELF文件执行时出现段错误Segmentation fault,解决:使用010编辑器修改ELF文件不可执行段权限
问题:段错误,.eh_frame不可执行. 需求:改执行权限. 工具:010 Editer,我的版本:12.0.1 Windows 10. 工具下载:010编辑器官网下载页. 第一步 查看段的执行权限 ...
- Python 3.14 新特性盘点,更新了些什么?
Python 3.14.0 稳定版将于 2025 年 10 月正式发布,目前已进入 beta 测试阶段.这意味着在往后的几个月里,3.14 的新功能已冻结,不再合入新功能(除了修复问题和完善文档). ...
- Mysql 实现 rank 和 != 问题
我一直相信, 人是能预测未来的, 这应该是前几年看弗洛伊德, 荣格的一些心理学书, 给我的一些感受, 有个片段是关于做梦的, 一个人梦见子弹穿过他自己的头颅, 结果不久, 他就去世了. 这个片段当时给 ...
- SQL 强化练习 (七)
继续 sql 练习, 不能停下来的哦, 通过这一系列的搬砖操作, 相信在日常业务的sql 应该是能达到相对清楚地写出来的, 尤其是我做数据分析这块, 感觉真的每天都要写才行, 之前都是用 Python ...
- DeepSeek+Coze实战:从0到1搭建小红书图文改写智能体(喂饭级教程)
大家好,我是汤师爷,专注AI智能体分享~ 还在为小红书笔记创作发愁吗? 每天都要绞尽脑汁想文案,看着别人的爆款笔记却不知道如何模仿? 今天,我就教你如何利用AI智能体,轻松实现小红书图文改写,让创作效 ...
- RAG越来越不准?你可能忽略了“元数据”的力量
你是否也有这样的困扰? 问大模型一个很具体的问题:"请告诉我A软件的安装方法." 结果它却信誓旦旦地告诉了你B软件的安装步骤. 在这个过程中,你可能已经花了大量时间解析和清洗上千份 ...
- TVM Pass优化 -- 公共子表达式消除(Common Subexpr Elimination, CSE)
定义(What) 公共子表达式消除 就是如果表达式E的值已经计算的到了,并且自计算的到值后E的值就不再改变了,就说,表达式E在后续计算中是一个公共表达式. 简单说,该表达式上面已经执行过了,下面没必要 ...
- 通过tushare获取k线数据
tushare中get_k_date接口主要目的是获取k线数据,该接口融合了get_hist_data和get_h_data两个接口的功能,即能方便获取日周月的低频数据,也可以获取5.15.30和60 ...
- 赛前十天——递归(easy)
*理论上,递归与循环是等价的,即任何循环都可以重写为递归形式 eg: package javaPractice; public class Contest { public stati ...
- 对比Jira/禅道后,我们为什么选择Leangoo做敏捷项目管理?
一.敏捷团队的3大隐形痛点 我曾带领过一个6人的Scrum团队,迭代经常遇到: 需求变更黑洞:客户口头需求未及时同步,开发完成后才发现理解偏差(案例:某次迭代因此浪费32人日) 进度监控盲区:用Exc ...