这是我参与「第四届青训营 」笔记创作活动的第16天
1. 环境配置
java8 & flink1.9.3,windows10系统
-
java8下载地址 repo.huaweicloud.com/java/jdk/8u…
选择windows的exe版本即可
- flink1.9.3,最近的稳定支持windows的版本,下载地址 archive.apache.org/dist/flink/
-
创建一个本地 Flink 集群
在安装目录..\flink-1.9.3\bin\下启动cmd,输入
start-cluster.bat,生成2个java窗口, 在localhost:8081打开ui界面
-
运行测试用例
在..\flink-1.9.3\bin\输入
flink.bat run ../examples/batch/WordCount.jar,运行flink自带的测试样例也可以在ui界面上传任务,将../examples/batch/WordCount.jar上传,点击submit
监视各项任务完成情况
-
可能存在的问题
- Q1 输入
start-cluster.bat不能将生成的java窗口关闭,否则打不开localhost:808 - Q2 输入
start-cluster.bat无法生成java窗口,且打不开localhost:8081时,可以检查一下对应的java版本和flink版本是否匹配,例如:flink1.9.3不支持java17
- Q1 输入
2. 创建一个flink-java项目
要想运行flink-java,首先我们需要创建一个MAVEN项目。这里我用的是MAVEN3.8.6。参考了晚上许多修改pom的复杂方法均以失败告终后,我决定还是参考flink官网教程,使用控制台创建maven项目。具体方法如下:打开cmd窗口,进入创建的项目所在目录,输入
mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.9.3
其中1.9.3为flink版本。中途需要手动输入项目的groupId和artifactId,version和package使用默认的值,直接回车便好。出现BUILD SUCCESS即为创建成功。
使用IDEA打开创建好的项目,文件目录如下图所示。
在src\main\resources目录下新建hello.text文件,并输入
hello world
hello world
Life without
The Economist
would be life
without
a
global perspective
在src\main\java目录下新建WordCount.java文件,并输入
package com.guigu.wc;
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.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
//批处理 word count
public class WordCount {
public static void main(String[] args) throws Exception{
// 创建执行环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 从文件中读取数据
String inputPath = "C:\Users\KAYAK\Desktop\WordCount_3\demo\src\main\resources\hello.txt";
DataSet<String> inputDataSet = env.readTextFile(inputPath);
// 对数据进行处理,按空格分词展开,转换成(word,1)二元组进行统计
DataSet<Tuple2<String,Integer>> wordCountDataSet = inputDataSet.flatMap(new MyFlagMapper()).groupBy(0).sum(1);
// 打印输出
wordCountDataSet.print();
}
public static class MyFlagMapper implements FlatMapFunction<String,Tuple2<String,Integer>>{
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
// 按照空格分词
String [] words = s.split(" ");
for (String word:words){
collector.collect(new Tuple2<String, Integer>(word,1));
}
}
}
}
运行后得到结果,为各个单词出现的频率。
(a,1)
(world,2)
(Economist,1)
(hello,2)
(life,1)
(be,1)
(without,2)
(The,1)
(would,1)
(perspective,1)
(global,1)
(Life,1)
参考
blog.csdn.net/x976269167/… zhuanlan.zhihu.com/p/374960643 blog.csdn.net/yamaxifeng_… blog.csdn.net/m0_52652844… nightlies.apache.org/flink/flink… zhuanlan.zhihu.com/p/400693396