windows flink开发环境搭建java实例

99封情书 提交于 2020-02-27 20:22:23

        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,环境搭建简单了很多,不需要装虚拟机,后续更新更多代码,丰富技能储备。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!