Flink基于Yarn多种启动方式详解

发布于:2025-05-24 ⋅ 阅读:(13) ⋅ 点赞:(0)

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模式。


六、常见问题与排查

  1. 启动失败/资源不足

    • 检查Yarn队列剩余资源、参数设置是否合理。
    • 查看Yarn ResourceManager的Web UI和日志。
  2. 作业提交后无响应

    • 检查Yarn Application状态,确认JobManager是否正常启动。
    • 检查防火墙、端口连通性。
  3. 作业异常退出

    • 查看Flink Web UI和Yarn Application日志,排查代码或资源问题。
  4. 参数未生效

    • 注意Flink/Yarn参数优先级,部分参数需在flink-conf.yaml中全局配置。

七、总结

Flink on Yarn极大提升了流计算作业的资源利用率、弹性扩展能力和运维便捷性。掌握Session、Per-Job、Application三种模式的启动方式和适用场景,有助于企业根据业务需求构建高效、稳定、可扩展的流处理平台。

如需深入了解Flink on Yarn的高可用配置、与Kafka/HBase等组件集成、资源调度优化等内容,欢迎关注后续博客或留言交流!



网站公告

今日签到

点亮在社区的每一天
去签到