Flink on YARN启动方式介绍

195 阅读2分钟

Apache Flink是一款开源的流处理框架,用于处理大量数据流的实时分析和事件驱动型应用。Flink可以通过多种集群管理器来部署,比如Apache Mesos、Kubernetes和Apache Hadoop YARN。本文将重点介绍在YARN环境下部署及启动Flink的方法。

YARN(Yet Another Resource Negotiator),是Hadoop生态圈的一个资源管理系统,负责为分布式应用程序提供资源管理和调度。Flink通过YARN来实现动态资源分配以及与其他Hadoop组件的集成,支持两种不同的启动方式:会话模式(Session Mode)和应用模式(Application Mode)。

  1. 会话模式(Session Mode)

在会话模式下,首先启动一个Flink的YARN会话,然后将Flink作业提交到该会话中执行。YARN会话可以包含多个作业,这些作业共享会话中的资源。通过这种方式,避免了每次运行作业时都需要新的Flink ApplicationMaster。会话模式中的Flink架构可概括如下:

  • Flink YARN Client:用于与YARN ResourceManager通信以创建Flink ApplicationMaster。
  • Flink ApplicationMaster:负责管理Flink集群并与YARN ResourceManager进行沟通。
  • Flink JobManager:Flink ApplicationMaster中的组件,负责作业的调度和协调。
  • Flink TaskManager:负责执行作业中的具体任务。

通过以下命令启动Flink YARN会话:

./bin/yarn-session.sh -n <taskManager数量> -s <每个taskManager的插槽数量> -jm <每个JobManager的内存> -tm <每个TaskManager的内存>

参数说明:

  • -n:TaskManager的数量,可根据需要分配。
  • -s:每个TaskManager的插槽数量,明确每个TaskManager可以同时执行多少个subtask。
  • -jm:每个JobManager的内存大小。
  • -tm:每个TaskManager的内存大小。
  1. 应用模式(Application Mode)

应用模式下,将Flink作业一起提交,Flink与作业在YARN上作为一个单独的应用程序运行。对于每个Flink作业,都会创建一个新的Flink ApplicationMaster。应用模式可以更好地与YARN ResourceManager协同,但创建多个作业时可能会引起性能开销。

通过以下命令在YARN上启动Flink作业:

./bin/flink run-application -t yarn-application -Dyar.resource-manager.jobmanager-additional.main.flink.configuration=./conf/flink-conf.yaml -Dyar.resource-manager.jobmanager-additional.Json.file=./conf/configuration.json -Dyar.resource-manager.jobmanager.memory.process.size=<JobManager内存> -Dyar.resource-manager.taskmanager.memory.process.size=<TaskManager内存> -Dyar.resource-manager.slots=<TaskManager插槽数量> -p <并行度> <作业jar包路径> <作业参数>

参数说明:

  • -t :指定Flink运行时使用的部署目标,这里为“yarn-application”。
  • -D :以-D参数形式传递配置文件及相关参数。
  • -p :指定作业并行度。

总结

Flink在YARN环境下共有两种启动方式,分别为会话模式和应用模式。会话模式下,Flink集群可以运行多个作业,共享资源;而应用模式下,每个Flink作业会创建新的Flink ApplicationMaster,与YARN ResourceManager更紧密地协同。实际应用中需根据需求选择适当的启动方式。