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