简介: 在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的Workload,因此 Flink 也支持在 Yarn 集群运行。

1.为什么使用Flink On Yarn?

  • 1)、Yarn的资源可以按需使用,提高集群的资源利用率
  • 2)、Yarn的任务有优先级,根据优先级运行作业
  • 3)、基于Yarn调度系统,能够自动化地处理各个角色的 Failover(容错)
    当应用程序(MR、Spark、Flink)运行在YARN集群上时,可以实现容灾恢复。

当Flink on YARN 运行时,有如下特点:

  • 1)、JobManager 进程和 TaskManager 进程都由 Yarn NodeManager 监控;

JobManager和TaskManager都是运行NodeManager容器Contanier中

  • 2)、如果 JobManager 进程异常退出,则 Yarn ResourceManager 会重新调度 JobManager到其他机器;
  • 3)、如果 TaskManager 进程异常退出,JobManager 会收到消息并重新向 YarnResourceManager 申请资源,重新启动 TaskManager;

Flink如何与Yarn进行交互:(面试必备)

flink yarn模式对zookeeper的依赖 flink on yarn_配置文件

  • 1)、Client上传jar包和配置文件到HDFS集群上;
  • 2)、Client向Yarn ResourceManager提交任务并申请资源;
  • Flink Client上传完成jar包和配置文件以后,再向RM提交任务;此时RM,在NodeManager上启动容器,运行JobManager(进程),此时相当于AppMaster。
  • 3)、ResourceManager分配Container资源并启动ApplicationMaster,然后AppMaster加载Flink的
    Jar包和配置构建环境,启动JobManager;
  • JobManager和ApplicationMaster运行在同一个container上;
  • 一旦他们被成功启动,AppMaster就知道JobManager的地址(AM它自己所在的机器);
  • 它就会为TaskManager生成一个新的Flink配置文件(他们就可以连接到JobManager);这
    个配置文件也被上传到HDFS上;
  • 此外,AppMaster容器也提供了Flink的web服务接口;
  • YARN所分配的所有端口都是临时端口,这允许用户并行执行多个Flink
  • 4)、ApplicationMaster向ResourceManager申请工作资源,NodeManager加载Flink的Jar包和配置
    构建环境并启动TaskManager
  • 5)、TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务

2. Flink on Yarn 的两种运行方式

简介: 当将Flink 程序运行在YARN 集群上时,有2种方式:Sesssion会话模式和Job 分离模式。

Session会话模式:

  • 在YARN集群上启动【Flink Standalone 集群:运行1个JobManager和多个TaskManager】,可以提交多个Job 执行。
  • 此时,JobManager还是TaskManager,都是运行NodeManager Contanier容器中,以JVM 进程方式运行
  • 此外,提交每个Flink Job执行时,找的就是JobManager(AppMaster),找运行在YARN上应用ID

flink yarn模式对zookeeper的依赖 flink on yarn_flink_02

flink yarn模式对zookeeper的依赖 flink on yarn_flink_03

1: 在yarn上启动一个Flink 会话:  启动过后就可以访问Yarn的WEBUI了

[root@node1 ~]# /export/server/flink/bin/yarn-session.sh -d -jm 1024 -tm 1024 -s 2

JobManager Web Interface: http://node2.itcast.cn:38827
2021-03-03 15:26:23,635 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                 - The Flink YARN session cluster has been started in detached mode. In order to stop Flink gracefully, use the following command:
$ echo "stop" | ./bin/yarn-session.sh -id application_1614756061094_0002
If this should not be possible, then you can also kill Flink via YARN's web interface or via:
$ yarn application -kill application_1614756061094_0002

flink yarn模式对zookeeper的依赖 flink on yarn_配置文件_04

2: 使用`flink run`提交任务: 通过YARN任务界面上方的ApplicationMaster可以进入Flink的管理界面

[root@node1 ~]# more /tmp/.yarn-properties-root 
#Generated YARN properties file
#Wed Mar 03 15:26:23 CST 2021
dynamicPropertiesString=
applicationID=application_1614756061094_0002
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# /export/server/flink/bin/flink run /export/server/flink/examples/batch/WordCount.jar --input hdfs://node1.itcast.cn:8020/wordcount/input
3: 关闭`yarn-session`

方法1: echo "stop" | /export/server/flink/bin/yarn-session.sh -id application_1614756061094_0002

方法2: yarn application -kill application_1614756061094_0002

Job 分离模式:

每个Flink Job运行在YARN集群上时,都会运行Flink Standalone集群,执行每个Job中Task任务。

flink yarn模式对zookeeper的依赖 flink on yarn_flink_05

1: Job分离模式: `直接提交job`  

/export/server/flink/bin/flink run \
-m yarn-cluster -yjm 1024 -ytm 1024 \
/export/server/flink/examples/batch/WordCount.jar

统一访问 Yarn集群的webUI界面 8088

flink yarn模式对zookeeper的依赖 flink on yarn_配置文件_06


flink yarn模式对zookeeper的依赖 flink on yarn_flink_07

执行Flink任务时各个参数查看: [root@node1 flink]# bin/flink --help