这是我参与「第四届青训营 」笔记创作活动的第2天
1. java实现Flink批处理脚本
首先,配置MAVEN项目pom.xml中的flink依赖
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
接下来是代码分解
- 创建执行环境
// 创建执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
- 加载源数据
// 加载或创建源数据
DataSet<String> text = env.fromElements("this a book", "i love china", "i am chinese");
// 从文件中读取数据
// String inputPath = "D:\project\FlinkTutorial\src\main\resources\hello.txt";
// DataSet<String> inputDataSet = env.readTextFile(inputPath);
- 对数据进行处理,按空格分词展开,转换成(word,1)二元组进行统计
// 对数据进行处理,按空格分词展开,转换成(word,1)二元组进行统计
DataSet<Tuple2<String, Integer>> ds = text.flatMap(new LineSplitter()).groupBy(0).sum(1);
static class LineSplitter implements FlatMapFunction<String, Tuple2<String,Integer>> {
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> collector) throws Exception {
for (String word:line.split(" ")) {
collector.collect(new Tuple2<>(word,1));
}
}
}
- 输出数据到目的端
// 输出数据到目的端
ds.print();
执行结果如下:
2. java实现Flink流处理脚本
- 创建执行环境
// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
- 设置socket数据源
// 设置socket数据源
DataStreamSource<String> source = env.socketTextStream("127.0.0.1", 9999, "\n");
- 转化处理数据
// 转化处理数据
DataStream<WordWithCount> dataStream = source.flatMap(new FlatMapFunction<String, WordWithCount>() {
@Override
public void flatMap(String line, Collector<WordWithCount> collector) throws Exception {
for (String word : line.split(" ")) {
collector.collect(new WordWithCount(word, 1));
}
}
}).keyBy("word")//以key分组统计
.timeWindow(Time.seconds(2),Time.seconds(2))//设置一个窗口函数,模拟数据流动
.sum("count");//计算时间窗口内的词语个数
- 输出数据
// 输出数据到目的端
dataStream.print();
- 执行任务操作
// 执行任务操作
env.execute("Flink Streaming Word Count By Java");
windows配置端口监听:要想在windows系统下对端口进行监听,netcat是一个不错的选择。首先安装netcat,然后打开一个cmd控制台,输入net -l -p 9000。再打开一个新的cmd控制台,输入net localhost 9000。可以发现在其中一个窗口打字会同步到另一个窗口上。
执行:打开一个cmd控制台,输入net -l -p 9999,然后启动WordCount,输入 time is passed what is the time?,回车,输入下一句 time is nine time passed again,执行结果如下:
参考