Flink 提交到 Yarn的两种模式

1.Flink On Yarn 的内部实现原理

Flink on Yarn 模式的原理是依靠 YARN 来调度 Flink 任务,目前在企业中使用较多。 这种模式的好处是可以充分利用集群资源,提高集群机器的利用率,并且只需要 1 套 Hadoop 集群,就可以执行 MapReduce 和 Spark 任务,还可以执行 Flink 任务等,操作非常方便,不 需要维护多套集群,运维方面也很轻松。Flink on Yarn 模式需要依赖 Hadoop 集群,并且 Hadoop 的版本需要是 2.2 及以上。

Flink On Yarn 的内部实现原理:
在这里插入图片描述

  • 当启动一个新的 Flink YARN Client 会话时,客户端首先会检查所请求的资源(容器和内 存)是否可用。之后,它会上传 Flink 配置和 JAR 文件到 HDFS。
  • 客 户 端 的 下 一 步 是 请 求 一 个 YARN 容 器 启 动 ApplicationMaster 。 JobManager 和 ApplicationMaster(AM)运行在同一个容器中,一旦它们成功地启动了,AM 就能够知道 JobManager 的地址,它会为 TaskManager 生成一个新的 Flink 配置文件(这样它才能连 上 JobManager),该文件也同样会被上传到 HDFS。另外,AM 容器还提供了 Flink 的 Web 界面服务。Flink 用来提供服务的端口是由用户和应用程序 ID 作为偏移配置的,这 使得用户能够并行执行多个 YARN 会话。
  • 之后,AM 开始为 Flink 的 TaskManager 分配容器(Container),从 HDFS 下载 JAR 文件 和修改过的配置文件。一旦这些步骤完成了,Flink 就安装完成并准备接受任务了。

Flink on Yarn 模式在使用的时候又可以分为两种:
第 1 种模式(Session-Cluster):是在 YARN 中提前初始化一个 Flink 集群(称为 Flink yarn-session),开辟指定的资源,以后的 Flink 任务都提交到这里。这个 Flink 集群 会常驻在 YARN 集群中,除非手工停止。这种方式创建的 Flink 集群会独占资源,不管 有没有 Flink 任务在执行,YARN 上面的其他任务都无法使用这些资源。
在这里插入图片描述
第 2 种模式(Per-Job-Cluster):每次提交 Flink 任务都会创建一个新的 Flink 集群, 每个 Flink 任务之间相互独立、互不影响,管理方便。任务执行完成之后创建的 Flink 集群也会消失,不会额外占用资源,按需使用,这使资源利用率达到最大,在工作中推 荐使用这种模式。
在这里插入图片描述
注意:Flink on Yarn 还需要两个先决条件:
1.配置 Hadoop 的环境变量
2.下载 Flink 提交到 Hadoop 的连接器(jar 包),并把 jar 拷贝到 Flink 的 lib 目录下
在这里插入图片描述
在这里插入图片描述

2. Session-Cluster 模式(yarn-session)

先启动 Hadoop 集群,然后通过命令启动一个 Flink 的 yarn-session 集群

bin/yarn-session.sh -n 3 -s 3 -nm bjsxt -d

在这里插入图片描述
其中 yarn-session.sh 后面支持多个参数。

-n,--container <arg> 表示分配容器的数量(也就是 TaskManager 的数量)。
-D <arg> 动态属性。
-d,--detached 在后台独立运行。
-jm,--jobManagerMemory <arg>:设置 JobManager 的内存,单位是 MB。
-nm,--name:在 YARN 上为一个自定义的应用设置一个名字。
-q,--query:显示 YARN 中可用的资源(内存、cpu 核数)。
-qu,--queue <arg>:指定 YARN 队列。
-s,--slots <arg>:每个 TaskManager 使用的 Slot 数量。
-tm,--taskManagerMemory <arg>:每个 TaskManager 的内存,单位是 MB。
-z,--zookeeperNamespace <arg>:针对 HA 模式在 ZooKeeper 上创建 NameSpace。
-id,--applicationId <yarnAppId>:指定 YARN 集群上的任务 ID,附着到一个后台独 立运行的 yarn session 中

在这里插入图片描述
查看 WebUI: 由于还没有提交 Flink job,所以都是 0。
在这里插入图片描述
这个时候注意查看本地文件系统中有一个临时文件。有了这个文件可以提交 job 到 Yarn
在这里插入图片描述
提交 Job : 由于有了之前的配置,所以自动会提交到 Yarn 中。
提交之前先打开nc -lk 8888

[root@node1 ~]# nc -lk 8888

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
停止yarn-session集群

[root@node1 bin]# yarn application -kill application_1640395882226_0001
21/12/25 10:24:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
21/12/25 10:24:18 INFO client.ConfiguredRMFailoverProxyProvider: Failing over to rm2
Killing application application_1640395882226_0001
21/12/25 10:24:19 INFO impl.YarnClientImpl: Killed application application_1640395882226_0001

在这里插入图片描述

3. Pre-Job-Cluster 模式(yarn-cluster)

这种模式下不需要先启动 yarn-session。所以我们可以把前面启动的 yarn-session 集 群先停止,
确保 Hadoop 集群是健康的情况下直接提交 Job 命令:

[root@node1 bin]# ./flink run -m yarn-cluster -yn 3 -ys 3 yyy -c stream.FlinkStreamWordCount /root/test/Flink-test-1.0-SNAPSHOT.jar

在这里插入图片描述
任务提交参数讲解:相对于 Yarn-Session 参数而言,只是前面加了 y

-yn,--container <arg> 表示分配容器的数量,也就是 TaskManager 的数量。
-d,--detached:设置在后台运行。
-yjm,--jobManagerMemory<arg>:设置 JobManager 的内存,单位是 MB。
-ytm,--taskManagerMemory<arg>:设置每个 TaskManager 的内存,单位是 MB。
-ynm,--name:给当前 Flink application 在 Yarn 上指定名称。
-yq,--query:显示 yarn 中可用的资源(内存、cpu 核数)
-yqu,--queue<arg> :指定 yarn 资源队列
-ys,--slots<arg> :每个 TaskManager 使用的 Slot 数量。
-yz,--zookeeperNamespace<arg>:针对 HA 模式在 Zookeeper 上创建 NameSpace
-yid,--applicationID<yarnAppId> : 指定 Yarn 集群上的任务 ID,附着到一个后台独 立运行的 Yarn Session 中。

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

留不住的人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值