概述
FLink 如何执行在Yarn上面的呢?
首先我们需要了解到Flink的底层执行流程,然后看哪一步与Yarn进行适配,执行。
Flink底层执行流程:
-
用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 任务,它会生成一个JobGraph。
-
JobGraph 是由 source、map()、keyBy()/window()/apply() 和 Sink 等算子组成的。
-
当 JobGraph 提交给 Flink 集群后,能够以 Local、Standalone、Yarn 和 Kubernetes 四种模式运行。
那么我们下面主要看一下运行在Yarn的两种模式:
模式1 Yarn Per Job
Flink on Yarn 中的 Per Job 模式是指每次提交一个任务,然后任务运行完成之后资源就会被释放。
- 首先 Client 提交 Yarn App,比如 JobGraph 或者 JARs。
- 接下来 Yarn 的 ResourceManager 会申请第一个 Container。这个 Container 通过 Application Master 启动进程,Application Master 里面运行的是 Flink 程序,即 Flink-Yarn ResourceManager 和 JobManager。
- 最后 Flink-Yarn ResourceManager 向 Yarn ResourceManager 申请资源。当分配到资源后,启动 TaskManager。TaskManager 启动后向 Flink-Yarn ResourceManager 进行注册,注册成功后 JobManager 就会分配具体的任务给 TaskManager 开始执行。
实践
# 默认:{masterMemoryMB=1024, taskManagerMemoryMB=1024,numberTaskManagers=1, slotsPerTaskManager=1}
./bin/yarn-session.sh
## 启动一个有2个Taskmanager,jobmanager内存1GB,taskManager1GB内存的集群
./bin/yarn-session.sh -n 2 -jm 1024 -tm 1024
## 后台模式
./bin/yarn-session.sh -n 2 -jm 1024 -tm 1024 -d
然后在看输出日志里面
Flink JobManager is now running on flinkhadoop:43434 with leader id 00000000-0000-0000-0000-000000000000.
JobManager Web Interface: http://flinkhadoop:43434
本地调试的时候,直接把对应的执行信息改变即可!
final Stream