Flink流式计算 单词统计程序与任务管理

一.IDEA本地调试运行

1. 首先安装nc用于制造实时数据

下载地址 netcat 1.11 for Win32/Win64

 360会提示这个文件有病毒,会自动隔离这个文件,恢复文件后才能通过端口发送实时数据,恢复后解压文件

2. 启动nc

没有配置环境可以直接指定nc.exe直接启动nc发送数据

配置过环境变量使用直接使用nc启动

3. 编写flink代码

pom坐标

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.12</artifactId>
            <version>1.11.1</version>
        </dependency>
    </dependencies>

java代码

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.datastream.WindowedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.util.Collector;


/**
 * Flink 单次统计
 */
public class SocketWindowWordCount {
    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //获取端口9999的数据 需要先启动nc (执行命令 nc -l -p 9999),否则显示连接拒绝
        DataStream<String> text = env.socketTextStream("localhost", 9999, "\n");
        //对接收到的数据进行切割,并记录次数为1
        //使用FlatMapFunction必须显示指定泛型类型,使用(FlatMapFunction<String, Tuple2>) (value, out) ->{}这一种语法会报错
        SingleOutputStreamOperator<Tuple2<String, Long>> flatMap = text.flatMap(new FlatMapFunction<String, Tuple2<String, Long>>() {
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Long>> out) throws Exception {
                for (String word : value.split(",")) {
                    out.collect(new Tuple2<>(word, 1L));//单次记录
                }
            }
        });
        // 对KV对象的word成员变量进行分区计算
        KeyedStream<Tuple2<String, Long>, String> word = flatMap.keyBy(new KeySelector<Tuple2<String, Long>, String>() {
            @Override
            public String getKey(Tuple2<String, Long> tp2) throws Exception {
                return tp2.f0;
            }
        });
        //时间窗口长度为5秒,窗口移动为1秒进行计算
        WindowedStream<Tuple2<String, Long>, String, TimeWindow> windowedStream = word.timeWindow(Time.seconds(5), Time.seconds(1));
        // 统计具有相同的key
        SingleOutputStreamOperator<Tuple2<String, Long>> windowCounts = windowedStream.reduce(new ReduceFunction<Tuple2<String, Long>>() {
            @Override
            public Tuple2<String, Long> reduce(Tuple2<String, Long> tp2_1, Tuple2<String, Long> tp2_2) throws Exception {
                return new Tuple2<>(tp2_1.f0, tp2_1.f1 + tp2_2.f1);
            }
        });
        //调试打印到控制台
        windowCounts.addSink(new PrintSinkFunction<>());//添加addSink,打印到控制台
        env.execute("Socket Window WordCount"); //开始执行
    }
}
4. 启动java的main方法后进入dos界面通过nc发送数据

控制台中实时显示通过过过nc发送的数据

二.使用linux命令提交任务运行

1. 官网安装flink (官网地址 Apache Flink Documentation | Apache Flink    中文官网)

下载地址 https://mirror.bit.edu.cn/apache/flink/flink-1.11.1/flink-1.11.1-bin-scala_2.12.tgz

 flink分为scala_2.11和scala_2.12两种类型不兼容,可以根据之前项目选择的scala版本下载保持scala版本一致

2. 下载完成后解压配置环境变量

# flink
export FLINK_HOME=/home/flink/flink-1.11.1
export PATH=$PATH:$FLINK_HOME/bin

更新环境变量

source /etc/profile
3. 启动flink集群
start-cluster.sh
4. 检查flink角色状态
[root@yc3 flink-1.11.1]# jps
22724 Jps
10501 TaskManagerRunner
10204 StandaloneSessionClusterEntrypoint

访问默认的任务管理页面 127.0.0.1:8081

5. 测试flink的计算功能

开启nc任务

nc -l -p 9999

启动flink的单词统计计算任务

flink run ../examples/streaming/SocketWindowWordCount.jar   --hostname 127.0.0.1 --port 9999

查看页面的任务状态

 实时查看日志

tail -f <flink_home>/log/flink-root-taskexecutor-0-localhost.out

通过nc发送数据

查看打印结果

功能正常

6. 测试使用自定义java代码提交执行任务

使用一步骤中的代码打包上传服务器, 提交任务  -c 后面跟运行的main全类名

flink run  -c  SocketWindowWordCount ./test.jar

参数解析

-c 指定main方法的全类名
-p 指定并行度
-m 指定jobmanager的地址 默认localhost:8081

启动后使用nc发送数据,查看日志文件

日志文件

linux 提交任务完成

三.使用web页面提交任务

1. 进入管理任务页面上传jar程序

2. 编写参数并运行任务

参数解释

3. 使用nc工具发送数据并查看日志文件

 

一切正常

四.spark on yarn 提交任务

使用spark on yarn 提交任务 需要依赖flink启动脚本和yarn集群,不需要启动flink集群

1. 添加依赖配置

 将hadoop和yarn配置环境变量,并配置HADOOP_CONF_DIR与HADOOP_CLASSPATH

#FLINK
export FLINK_HOME=/home/tools/flink/flink-1.11.2
export PATH=$FLINK_HOME/bin:$PATH

#HADOOP
export HADOOP_HOME=/home/tools/hadoop/hadoop-2.7.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`
2. 刷新环境变量

3. 提交任务 (yarn已经启动成功后再提交flink任务)
flink run \
    -m yarn-cluster \
    -ynm myapp \
    -d -c com.Stream ./myapp.jar

4. 查看yarn任务管理(All Applications)控制台 默认端口8088

5. 跳转UI界面

6. 启动参数解释

-m 运行模式,这里使用yarn-cluster,即yarn集群模式。
-ys slot个数。
-ynm Yarn application的名字。
-yjm job manager 的堆内存大小。
-ytm task manager 的堆内存大小。
-d detach模式。可以运行任务后无需再控制台保持连接。
-c 指定jar包中class全名。

7. 启动方式二 使用yarn session的方式

  yarn session方式需要单独启动一个任务去yarn集群中申请一块资源空间,这块空间一直存在,后续所有任务都需要提交到刚才申请的空间中


  1)  启动 yarn session
yarn-session.sh -n 2 -jm 1024 -tm 1024 -d -s 2

参数解释

-n 2 表示指定两个容器 
-jm 1024 表示jobmanager 1024M内存 
-tm 1024表示taskmanager 1024M内存 
-d --detached  任务后台运行 
-s  指定每一个taskmanager分配多少个slots(处理进程)。建议设置为每个机器的CPU核数
-nm, YARN上为一个自定义的应用设置一个名字
-q, 显示yarn中可用的资源 (内存, cpu核数)
-qu, 指定YARN队列.
-z,针对HA模式在zookeeper上创建NameSpace

 application中出现了 任务Flink session cluster ,后续所有需要计算的任务都会提交当Flink session cluster的资源容器内部

 2)  提交任务

flink run examples/batch/WordCount.jar

 

flink集群ui界面中出现了新任务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钻风巡山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值