FlinkYARN 模式部署运行作业

文章介绍了Flink独立模式的特点,并强调在大数据场景下,使用YARN进行资源管理的优势。详细阐述了Flink在YARN上的部署过程,包括客户端提交应用、ResourceManager分配容器、JobManager和TaskManager的启动。还提到了Flink与Hadoop的版本兼容性变化,以及启动YARN会话的命令和相关参数。最后,展示了如何提交作业和通过socket发送信息的示例代码。
摘要由CSDN通过智能技术生成

背景:

独立(Standalone)模式由 Flink 自身提供资源,无需其他框架,这种方式降低了和其他
第三方资源框架的耦合性,独立性非常强。但我们知道,Flink 是大数据计算框架,不是资源
调度框架,这并不是它的强项;所以还是应该让专业的框架做专业的事,和其他资源调度框架
集成更靠谱。而在目前大数据生态中,国内应用最为广泛的资源管理平台就是 YARN 了。所
以接下来我们就将学习,在强大的 YARN 平台上 Flink 是如何集成部署的。
整体来说,YARN 上部署的过程是:客户端把 Flink 应用提交给 Yarn 的 ResourceManager,
Yarn 的 ResourceManager 会向 Yarn 的 NodeManager 申请容器。在这些容器上,Flink 会部署
JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业
所需要的 Slot 数量动态分配 TaskManager 资源。

相关准备和配置:

在 Flink1.8.0 之前的版本,想要以 YARN 模式部署 Flink 任务时,需要 Flink 是有 Hadoop
支持的。从 Flink 1.8 版本开始,不再提供基于 Hadoop 编译的安装包,若需要 Hadoop 的环境
支持,需要自行在官网下载 Hadoop 相关版本的组件 flink-shaded-hadoop-2-uber-2.7.5-10.0.jar,
并将该组件上传至 Flink 的 lib 目录下。在 Flink 1.11.0 版本之后,增加了很多重要新特性,其
中就包括增加了对Hadoop3.0.0以及更高版本Hadoop的支持,不再提供“flink-shaded-hadoop-*”
jar 包,而是通过配置环境变量完成与 YARN 集群的对接。
在将 Flink 任务部署至 YARN 集群之前,需要确认集群是否安装有 Hadoop,保证 Hadoop
版本至少在 2.2 以上,并且集群中安装有 HDFS 服务。

具体配置步骤如下:

1、按照 3.1 节所述,下载并解压安装包,并将解压后的安装包重命名为 flink-1.13.0-yarn,
本节的相关操作都将默认在此安装路径下执行。
2、配置环境变量,增加Hadoop环境变量配置如下:

$ sudo vim /etc/profile.d/my_env.sh
##HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop-3.3.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

3、启动 Hadoop 集群,包括 HDFS 和 YARN。

[zhang@hadoop102 ~]$ start-dfs.sh
[zhang@hadoop103 ~]$ start-yarn.sh

分别在 3 台节点服务器查看进程启动情况。
在这里插入图片描述

开启YARN会话:

YARN 的会话模式与独立集群略有不同,需要首先申请一个 YARN 会话(YARN session)
来启动 Flink 集群。具体步骤如下:
4、执行Flink命令向 YARN 集群申请资源,开启一个 YARN 会话,启动 Flink 集群。

注意:启动flink使用的用户一定要和Hadoop启动的用户保持一致,不然会报错。
The main method caused an error: Failed to execute job ‘Flink Streaming Job’

[zhang@ecs-88194-0001 root]$ bin/yarn-session.sh -nm test

可用参数解读:
⚫ -d:分离模式,如果你不想让 Flink YARN 客户端一直前台运行,可以使用这个参数, 即使关掉当前对话窗口,YARN session 也可以后台运行。
⚫ -jm(–jobManagerMemory):配置 JobManager 所需内存,默认单位 MB。
⚫ -nm(–name):配置在 YARN UI 界面上显示的任务名。
⚫-qu(–queue):指定 YARN 队列名。
⚫ -tm(–taskManager):配置每个 TaskManager 所使用内存。 注意:Flink1.11.0 版本不再使用-n 参数和-s 参数分别指定 TaskManager 数量和 slot 数量, YARN 会按照需求动态分配 TaskManager 和 slot。所以从这个意义上讲,YARN 的会话模式也 不会把集群资源固定,同样是动态分配的。 YARN Session 启动之后会给出一个 web UI 地址以及一个 YARN application ID,如下所示, 用户可以通过 web UI 或者命令行两种方式提交作业。
在这里插入图片描述
5、通过命令行提交作业
① 将 Standalone 模式讲解中打包好的任务运行 JAR 包上传至集群
② 执行以下命令将该任务提交到已经开启的 Yarn-Session 中运行。

[zhang@ecs-88194-0001 root]$  bin/flink run   -c com.atguigu.wc.StreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar

在这里插入图片描述
在这里插入图片描述
6、向端口发送信息。
在这里插入图片描述
在这里插入图片描述

测试代码:

package com.zxl.flink;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
/*socket 文本流的读取需要配置两个参数:发送端主机名和端口号。这里代码
中指定了主机“hadoop102”的 7777 端口作为发送数据的 socket 端口,读者可以根据
测试环境自行配置*/
public class socketTextStream {
    public static void main(String[] args) throws Exception {
        /*加载配置*//*
        Configuration configuration = new Configuration();
        *//*配置WEBUI访问端口*//*
        configuration.setInteger(RestOptions.PORT,9090);
        *//*创建流式执行环境*//*
        StreamExecutionEnvironment environment = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(configuration);*/
        // TODO: 2023/4/11 注意: createLocalEnvironmentWithWebUI只用于本地调试,生产环境必须使用getExecutionEnvironment
        StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
        /*监听端口数据*/
        DataStreamSource<String> source = environment.socketTextStream("192.168.0.198", 9999);
        /*转换数据格式*/
        SingleOutputStreamOperator<Tuple2<String, Integer>> operator = source.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
                collector.collect(Tuple2.of(s, 1));
            }
        });
        /*分组*/
        KeyedStream<Tuple2<String, Integer>, Tuple> keyedStream = operator.keyBy(0);
        /*求和*/
        SingleOutputStreamOperator<Tuple2<String, Integer>> sum = keyedStream.sum(1);
        /*打印数据*/
        sum.print();
        /*流计算需要启动执行程序*/
        environment.execute();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值