Flink基于Yarn多种启动方式详解
随着大数据实时计算需求的日益增长,Flink已成为业界主流的流处理引擎。而在企业级大数据平台中,资源管理和作业调度一般交由Yarn完成。Flink与Yarn深度集成后,不仅充分利用Hadoop生态资源,还能灵活应对各种作业调度和资源隔离需求。本文将系统介绍Flink on Yarn的多种启动方式、适用场景、配置方法及常见问题。
一、Yarn简介
Yarn(Yet Another Resource Negotiator)是Hadoop生态的资源管理和调度平台。它负责集群资源统一分配、作业调度和生命周期管理,是目前大数据平台主流的资源管理框架。
Flink on Yarn指的是将Flink集群作为Yarn的一个应用提交和管理,利用Yarn实现弹性资源分配、作业隔离和高可用。
二、Flink on Yarn的三种运行模式
Flink on Yarn主要支持三种运行模式,分别适用于不同的业务场景:
1. Session Cluster(会话模式)
- 含义:先在Yarn上启动一个长期运行的Flink集群(Session),后续所有作业都提交到该集群上运行。
- 优点:
- 启动速度快(作业无需重复拉起集群)。
- 多个作业可共享资源,适合高频、短小作业提交。
- 缺点:
- 作业间资源竞争,彼此影响;一个作业异常可能影响整个Session。
- 适用场景:开发测试环境、实时查询、多个小作业并发运行。
2. Per-Job Cluster(每作业独占模式)
- 含义:每提交一个Flink作业,自动在Yarn上启动一个全新的Flink集群。作业执行完毕后,集群自动销毁。
- 优点:
- 作业完全隔离,互不影响。
- 资源独立分配,便于作业级监控和运维。
- 缺点:
- 启动集群有一定延迟。
- 不适合大量小作业频繁提交。
- 适用场景:生产环境、重要作业、作业独立性要求高的场景。
3. Application Mode(应用模式,Flink 1.11+)
- 含义:Flink程序的main方法在客户端打包后,通过Yarn ApplicationMaster启动并运行。整个应用的生命周期由Yarn管理。
- 优点:
- 完整的生命周期管理。
- 支持资源动态分配。
- 适合自动化运维与云原生场景。
- 缺点:
- 启动速度略慢于Session模式。
- 需要Flink 1.11及以上版本。
- 适用场景:自动化大数据平台、云原生、作业全生命周期管理。
三、Flink on Yarn各模式启动命令与配置
1. Yarn Session Cluster启动方式
启动Yarn Session
./bin/yarn-session.sh -d \
-nm FlinkSessionCluster \
-d # 后台启动
-qu root.default # 指定Yarn队列(可选)
-n 2 # 启动2个TaskManager
-s 2 # 每个TaskManager 2个slot
-jm 1024 # JobManager内存
-tm 2048 # TaskManager内存
提交作业到Session Cluster
./bin/flink run -m yarn-cluster \
-yid <applicationId> \
-c com.example.MyJob \
myjob.jar
-yid
为Yarn Session对应的ApplicationId,需在Web UI或yarn application -list
中查询。
关闭Session Cluster
./bin/yarn-session.sh -id <applicationId> -shutdown
2. Per-Job Cluster启动方式
直接提交作业(自动拉起Flink集群)
./bin/flink run -m yarn-cluster \
-yqu root.default \
-yn 2 \
-ys 2 \
-yjm 1024m \
-ytm 2048m \
-c com.example.MyJob \
myjob.jar
-m yarn-cluster
指定Yarn集群模式-yn
TaskManager数量-ys
每个TaskManager的slot数-yjm
JobManager内存-ytm
TaskManager内存
作业执行完毕后,Yarn会自动回收该Flink集群资源。
3. Application Mode启动方式(Flink 1.11+)
启动命令
./bin/flink run-application -t yarn-application \
-Dyarn.application.name=FlinkAppCluster \
-Dyarn.application.queue=root.default \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=2048m \
-Dtaskmanager.numberOfTaskSlots=2 \
-c com.example.MyApp \
myapp.jar
-t yarn-application
:指定Application模式- 其余参数同Per-Job模式
Application模式下,Flink作业的main方法在Yarn ApplicationMaster进程中执行,生命周期与Yarn Application绑定。
四、配置参数详解与优化建议
- 资源参数:
-yn
/-n
:TaskManager数量-ys
/-s
:每个TaskManager的slot数-yjm
/-jm
:JobManager内存-ytm
/-tm
:TaskManager内存
- 队列参数:
-qu
/-yqu
:指定Yarn队列
- JAR包相关:
-c
:指定主类-j
:指定JAR包路径
建议:
- 合理分配内存和slot,避免资源碎片和浪费。
- 生产环境建议开启Checkpoint、Savepoint,并将其目录指向HDFS或S3等分布式存储。
- 合理设置Yarn队列,确保不同业务资源隔离。
五、企业应用场景选型建议
- Session Cluster:适合开发调试、低优先级作业、频繁提交的小作业。
- Per-Job Cluster:适合生产环境关键作业、作业间需资源隔离、便于独立监控和升级。
- Application Mode:适合自动化平台、云原生场景、作业全生命周期管理。
企业内部常见做法:开发测试用Session模式,核心生产作业用Per-Job或Application模式。
六、常见问题与排查
启动失败/资源不足
- 检查Yarn队列剩余资源、参数设置是否合理。
- 查看Yarn ResourceManager的Web UI和日志。
作业提交后无响应
- 检查Yarn Application状态,确认JobManager是否正常启动。
- 检查防火墙、端口连通性。
作业异常退出
- 查看Flink Web UI和Yarn Application日志,排查代码或资源问题。
参数未生效
- 注意Flink/Yarn参数优先级,部分参数需在
flink-conf.yaml
中全局配置。
- 注意Flink/Yarn参数优先级,部分参数需在
七、总结
Flink on Yarn极大提升了流计算作业的资源利用率、弹性扩展能力和运维便捷性。掌握Session、Per-Job、Application三种模式的启动方式和适用场景,有助于企业根据业务需求构建高效、稳定、可扩展的流处理平台。
如需深入了解Flink on Yarn的高可用配置、与Kafka/HBase等组件集成、资源调度优化等内容,欢迎关注后续博客或留言交流!