Windows搭建Flink项目,实现wordcountstream socket流处理并提交

1、环境

  1. JDK 1.8
  2. Maven
  3. Intellij Idea
  4. Flink1.9.2

2、创建maven项目

导入依赖

注意:这里<flink.version>1.9.2</flink.version>
    <
scala.binary.version>2.12</scala.binary.version>版本号要与安装的flink版本号一致,否则最后提交时报错。我这里是

Pom.xml中添加

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <flink.version>1.9.2</flink.version>
        <scala.binary.version>2.12</scala.binary.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
    </dependencies>
使用socket接收数据,创建StreamWordCount_Socket.class,使用socket无界流处理
import org.apache.flink.api.common.functions.FlatMapFunction;

import org.apache.flink.api.java.tuple.Tuple2;

//import org.apache.flink.client.program.StreamContextEnvironment;

import org.apache.flink.streaming.api.datastream.DataStream;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import org.apache.flink.util.Collector;



/**

 * @author : Ashiamd email: ashiamd@foxmail.com

 * @date : 2021/1/29 11:13 PM

 */

public class StreamWordCount_Socket {

    //无界流--socket

    public static void main(String[] args) throws Exception {



        // 创建流处理执行环境

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();



        // 设置并行度,默认值 = 当前计算机的CPU逻辑核数(设置成1即单线程处理)

        // env.setMaxParallelism(32);



        // 从文件中读取数据 有界流处理

        //String inputPath = "D:\\IdeaProjects\\flink-study\\src\\main\\resources\\hello.txt";

        DataStream<String> inputDataStream = env.socketTextStream("localhost",9000);



        // 基于数据流进行转换计算 流处理中数据分组keyBy(相同数据分组)  批处理中分组groupby

        DataStream<Tuple2<String,Integer>> resultStream = inputDataStream.flatMap(new MyFlatMapper())

                .keyBy(item->item.f0)

                .sum(1);



        resultStream.print();



        // 执行任务

        env.execute();

    }

    public static class MyFlatMapper implements FlatMapFunction<String, Tuple2<String, Integer>> {



        @Override

        public void flatMap(String s, Collector<Tuple2<String, Integer>> out) throws Exception {

            // 按空格分词

            String[] words = s.split(" ");

            // 遍历所有word,包成二元组输出

            for (String str : words) {

                out.collect(new Tuple2<>(str, 1));

            }

        }

    }

}
端口号与Ubuntu端口号一致。

3、安装flink

官网:https://flink.apache.org/downloads.html

安装了1.9.2版本,1.9以上版本bin中无.Bat文件,我的笔记本上无法运行。

 

 

运行flink

 

浏览器进入http://localhost:8081/#/overview

 

4、安装Ubuntu 使用nc命令发送socket

本机安装netcat nc命令执行不了,在Windows store中安装Ubuntu子系统,Linux系统中自带nc命令,发送socket。

5、运行效果:

打开Ubuntu输入nc -l -k 9000

9000是端口号,在StreamWordCount_Socket.class中对应输入端口号,idea中运行如下:

 6、提交到flink仪表盘:

打包

​​​​​​​

 

 启动flink

进入http://localhost:8081/#/overview

找到项目target中的jar包:

输入入口和host、port,点击提交

 

提交成功

如果在提交时报错可以打开flink log文件查看报错信息,

一开始提交显示服务器错误,查看log文件发现报错:

NoClassDefFoundError: org/apache/flink/client/program/StreamContextEnvironment

原因是pom文件中导入依赖版本和flink版本不同,在1.9.2中没有

StreamContextEnvironment.class

原本导入的是1.12.1,重新导入1.9.2的依赖,在1.9.2中使用的是StreamExecutionEnvironment.class

所以要注意不同版本 依赖中可能有不同的类。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值