简介: 在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的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进行交互:(面试必备)
- 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
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
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任务。
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任务时各个参数查看: [root@node1 flink]# bin/flink --help