flink是当下火热流行的大数据框架,支持高吞吐、低延迟、高性能,自带时间事件,支持有状态计算和窗口操作,支持任务重启从最终计算点开始不必重新运行整个任务。
说完flink特点,开始搭建windows下开发的环境,运行环境如下:
系统:windows10
jdk版本:oracle jdk1.8,最低1.8
scala:2.11.12,2.11是大部分软件的开发版本,适应性强,且比较新。
maven:3.3.3,最低要求3.1
flink:1.9.1
开发工具:idea 2019.3.1
jdk、scala、maven安装方式,自行百度,不在赘述,win+r,可查看到版本接口。

准备好基础环境,进入正题。
1、安装flink
下载地址:https://flink.apache.org/downloads.html#apache-flink-191

选择对应版本,下载即可,下载后的安装包是tgz压缩文件,直接解压到安装路径。
双击运行bin目录下start-cluster.bat文件,flink启动,可以http://localhost:8081看到flink运行页面。

2、创建项目
打开idea,选择File --> New --> Project ,选择mave直接next。

输入项目名和项目路径,点击finish即可。

修改pom.xml指定flink相关配置,内容如下:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<flink.version>1.9.1</flink.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<!--java 版本-->
<!--<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.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>-->
<!--scala 版本-->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_${scala.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_${scala.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
项目运行发生类加载异常,详情如下:

需要导入flink安装目录下jar包,选择File --> Project Structure --> Modules,选择Dependencies --> 右边加号 --> JARs or directorie

找到刚刚flink安装目录,指定到lib目录下:

点击apply和ok退出配置。
3、编写代码
在src.main目录下增加scala源目录,最终目录结构如下:

创建项目读取的txt文件, 在src目录下创建demo.txt。内容如下,空格分隔。
a b d 的 ada a 的 ada a
java目录下创建WordCountJava类,代码如下
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
/**
* java版本flink模型
*/
public class WordCountJava {
public static void main(String[] args) throws Exception {
//第一步:获取运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//第二步:从文件中读取
DataStreamSource text = env.readTextFile("./src/demo.txt");
//第三步:计算数据
DataStream windowCount = text.flatMap(new FlatMapFunction<String, WordWithCount>() {
@Override
public void flatMap(String value, Collector out) throws Exception {
String[] splits = value.split("\\s");
for (String word : splits) {
out.collect(new WordWithCount(word, 1L));
}
}
}).keyBy("word").sum("count"); //.timeWindow(Time.seconds(2), Time.seconds(1))
//把数据打印到控制台
windowCount.print().setParallelism(1);//使用一个并行度
//注意:因为flink是懒加载的,所以必须调用execute方法,上面的代码才会执行
env.execute("streaming word count");
}
public static class WordWithCount {
public String word;
public long count;
public WordWithCount() {
}
public WordWithCount(String word, long count) {
this.word = word;
this.count = count;
}
@Override
public String toString() {
return "WordWithCount{" +
"word='" + word + '\'' +
", count=" + count +
'}';
}
}
}
右键run项目,执行结果如下:

3、总结
首次尝试flink开发,相比hadoop,环境搭建简单了很多,不需要装虚拟机,后续更新更多代码,丰富技能储备。
来源:oschina
链接:https://my.oschina.net/wangzonghui/blog/3158877