Flink部署模式详解
Flink部署模式详解:Standalone、YARN会话、单作业与应用模式
前言
学完Flink基础之后,部署是绕不开的一关。Flink支持多种部署模式,不同模式适用于不同场景。本文结合尚硅谷Flink1.17教程,梳理Standalone和YARN三种运行模式的原理与使用方式,帮助你真正搞清楚它们的区别。
一、部署模式概览
Flink的部署模式分两个维度来理解:
按资源管理方式:
- Standalone:Flink自己管理资源,不依赖外部资源框架
- YARN:把资源管理交给Hadoop YARN
按作业提交方式(以YARN为例,分三种):
- Session模式(会话模式):先启动集群,再提交作业
- Per-Job模式(单作业模式):每个作业单独启动一个集群(Flink1.17已废弃,了解即可)
- Application模式(应用模式):main方法在集群端执行
下面逐一讲解。
二、Standalone模式
原理
Standalone是Flink最基础的部署方式,不依赖任何外部资源管理框架,由Flink自己的JobManager和TaskManager组成集群。
架构如下:
- JobManager:负责作业调度、资源协调、Checkpoint协调
- TaskManager:负责实际的Task执行,提供Slot资源
启动方式
启动集群:
# 进入Flink安装目录
cd $FLINK_HOME
# 启动集群
bin/start-cluster.sh
# 查看进程
jps
# 应该看到:StandaloneSessionClusterEntrypoint(JobManager)、TaskManagerRunner(TaskManager)
提交作业:
bin/flink run -c com.xxx.WordCount ./xxx.jar
停止集群:
bin/stop-cluster.sh
特点
| 优点 | 缺点 |
|---|---|
| 部署简单,不依赖外部组件 | 资源固定,无法动态扩缩容 |
| 适合开发测试 | 不适合生产环境大规模使用 |
三、YARN模式
YARN模式把资源管理交给Hadoop YARN,Flink只负责作业逻辑。这是企业生产环境最常用的部署方式。
前置条件
需要配置好HADOOP_HOME或HADOOP_CLASSPATH环境变量:
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.1 Session模式(会话模式)
原理
先在YARN上申请资源,启动一个长期运行的Flink集群,然后往这个集群里提交多个作业。
多个作业共享同一个JobManager和TaskManager资源池。
流程图:
客户端 YARN Flink集群
| | |
|-- 启动Session集群 ------->| |
| |-- 分配JobManager资源 -->|
| |-- 分配TaskManager资源 ->|
|<-------- 集群启动成功 ----| |
| |
|-- 提交作业A --------------------------------------->|
|-- 提交作业B --------------------------------------->|
|-- 提交作业C --------------------------------------->|
使用方式
步骤一:启动Session集群
bin/yarn-session.sh -nm test
常用参数:
-nm, --name # ApplicationName,集群名称
-jm, --jobManagerMemory # JobManager内存,默认1024MB
-tm, --taskManagerMemory # TaskManager内存,默认1024MB
-s, --slots # 每个TaskManager的Slot数
-d # 后台运行(detached模式)
示例:
# 后台启动,JobManager 1G,每个TM 2G,2个Slot
bin/yarn-session.sh -d -jm 1024 -tm 2048 -s 2 -nm my-session
步骤二:提交作业
# 方式一:指定ApplicationId
bin/flink run -t yarn-session \
-Dyarn.application.id=application_1234567890_0001 \
-c com.xxx.WordCount ./xxx.jar
# 方式二:通过环境变量(启动session后自动设置)
bin/flink run -c com.xxx.WordCount ./xxx.jar
停止集群:
# 通过YARN杀死Application
yarn application -kill application_1234567890_0001
适用场景
适合作业数量多、单个作业运行时间短的场景,比如频繁提交的小任务,因为集群常驻,省去了每次启动集群的开销。
3.2 Per-Job模式(单作业模式)
注意:Flink 1.15开始废弃,1.17中已移除,仅作了解。
原理
每提交一个作业,就在YARN上单独启动一个Flink集群,作业结束后集群销毁。作业之间资源完全隔离。
# 提交时指定模式(1.15以前)
bin/flink run -t yarn-per-job -c com.xxx.WordCount ./xxx.jar
为什么废弃?因为Application模式更好地解决了同样的问题(见下)。
3.3 Application模式(应用模式)
原理
这是理解难点,也是重点,需要和Session模式对比来理解。
Session/Per-Job模式的问题:main方法(用户代码)在客户端执行,然后由客户端提交给JobManager。当客户端机器性能差或网络带宽低时,会成为瓶颈。
Application模式的改进:main方法在JobManager端执行,客户端只负责提交,不做任何计算。
对比如下:
| 对比项 | Session模式 | Application模式 |
|---|---|---|
| main方法执行位置 | 客户端 | JobManager(集群端) |
| 集群生命周期 | 长期运行 | 随作业启动和销毁 |
| 资源隔离 | 多作业共享 | 每个Application独立 |
| 客户端压力 | 大 | 小 |
使用方式
bin/flink run-application \
-t yarn-application \
-c com.xxx.StreamWordCount \
./xxx.jar
常用参数:
-t yarn-application # 指定模式
-c # 指定主类
-jm # JobManager内存
-tm # TaskManager内存
-p # 并行度
查看作业状态:
# 列出所有作业
bin/flink list -t yarn-application -Dyarn.application.id=application_xxx
# 取消作业
bin/flink cancel -t yarn-application \
-Dyarn.application.id=application_xxx \
<job-id>
适用场景
适合生产环境中的大作业,或者需要强资源隔离的场景。每个Application有独立的JobManager,互不干扰。
四、三种YARN模式对比总结
| 特性 | Session | Per-Job(已废弃) | Application |
|---|---|---|---|
| 集群共享 | ✅ 共享 | ❌ 独立 | ❌ 独立 |
| main执行位置 | 客户端 | 客户端 | JobManager |
| 资源隔离 | 弱 | 强 | 强 |
| 启动速度 | 快(集群已存在) | 慢 | 慢 |
| 适用场景 | 小作业多、频繁提交 | — | 大作业、生产环境 |
五、如何选择部署模式
是否有Hadoop环境?
├── 否 → Standalone(适合开发测试)
└── 是 → YARN
├── 作业多且小、需要快速提交 → Session模式
└── 作业大、需要资源隔离、生产环境 → Application模式
小结
- Standalone:Flink自己管资源,简单,适合开发测试
- YARN Session:集群常驻,多作业共享,main在客户端,适合小作业频繁提交
- YARN Application:每个作业独立集群,main在集群端,适合生产大作业
- Per-Job:已废弃,了解即可
理解这几种模式的核心在于抓住两个关键问题:资源谁来管? 和 main方法在哪执行? 搞清楚这两点,部署模式就不难了。
更多推荐
所有评论(0)