Flink入门案例(Word Count)

本文通过Flink 1.9.0演示了Word Count的实现过程,包括安装、启动本地监听模式、作业提交、数据发送及查看输出结果,帮助理解流式数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flink安装包下载【flink-1.9.0-bin-scala_2.11.tgz】

 

启动

[hadoop@hadoop flink-1.9.0]$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host hadoop.
Starting taskexecutor daemon on host hadoop.

 

启动本地监听模式端口9000

nc -l 9000

 

启动作业

./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000

 

登录本机8081地址,可以看到已经提交了一个作业正在运行

 

本地监听模式发送数据

[hadoop@hadoop flink-1.9.
### Flink Java 示代码及教程 #### Maven 依赖配置 为了在项目中使用 Apache Flink 和 Java 进行开发,需要先设置项目的 Maven 依赖。以下是创建基于 Flink 的 Java 应用程序所需的 POM 文件中的部分配置[^1]: ```xml <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-java --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java_2.12 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Add other dependencies as needed --> </dependencies> ``` #### WordCount 实现案例 WordCount 是学习分布式计算框架的经典入门子之一,在这里提供了一个简单的批处理版本的 WordCount 程序作为参考[^2]: ```java import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.util.Collector; public class BatchWordCount { public static void main(String[] args) throws Exception { final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.readTextFile("src/main/resources/input/word.txt"); DataSet<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()) .groupBy(0) .sum(1); counts.writeAsCsv("output", "\n", " "); env.execute("Batch Word Count Example"); } public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { String[] tokens = value.toLowerCase().split("\\W+"); for (String token : tokens) { if (token.length() > 0) { out.collect(new Tuple2<>(token, 1)); } } } } } ``` 此段代码展示了如何利用 `ExecutionEnvironment` 来定义执行环境,并通过调用 `readTextFile()` 方法加载文件内容形成数据集;接着应用自定义函数 `Tokenizer` 对每条记录做分割统计操作。 #### 使用Lambda表达式的改进版FlatMap方法 除了传统的匿名内部类形式外,还可以采用更简洁优雅的方式——即Java8引入的Lambda表达式来简化上述flatMap逻辑: ```java DataSet<Tuple2<String, Integer>> wordCounts = text.flatMap((String line, Collector<Tuple2<String, Integer>> out) -> { Arrays.stream(line.split("\\W+")) .filter(word -> !word.isEmpty()) .forEach(word -> out.collect(Tuple2.of(word, 1))); }); ``` 这段代码实现了相同的功能但是更加紧凑易读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值