Apache Flink是一款开源的流处理框架,用于处理大量数据流的实时分析和事件驱动型应用。Flink可以通过多种集群管理器来部署,比如Apache Mesos、Kubernetes和Apache Hadoop YARN。本文将重点介绍在YARN环境下部署及启动Flink的方法。
YARN(Yet Another Resource Negotiator),是Hadoop生态圈的一个资源管理系统,负责为分布式应用程序提供资源管理和调度。Flink通过YARN来实现动态资源分配以及与其他Hadoop组件的集成,支持两种不同的启动方式:会话模式(Session Mode)和应用模式(Application Mode)。
- 会话模式(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的内存大小。
- 应用模式(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更紧密地协同。实际应用中需根据需求选择适当的启动方式。