Flink Yarn的2种任务提交方式

本文介绍了Flink在Yarn上两种任务提交方式:Pre-Job模式和Session模式。Pre-Job模式每次运行任务时会单独申请资源,任务结束后资源释放;Session模式则是在Yarn上预先申请资源,所有任务共享。详细阐述了两种模式的参数设置、运行流程及适用场景。

Flink Yarn的2种任务提交方式

Pre-Job模式介绍

每次使用flink run运行任务的时候,Yarn都会重新申请Flink集群资源(JobManager和TaskManager),任务执行完成之后,所申请的Flink集群资源就会释放,所申请的Yarn资源是独享的,不与其他任务分享资源。

运行命令

./bin/flink run -m yarn-cluster -yn 3 -ys 12 
-p 4 -yjm 1024m -ytm 4096m ./examples/batch/WordCount.jar

参数解读:
-p 并行度
-yn Task Managers数量
-ys 每个TaskManager的Slot数量
-yjm 每个JobManager内存 (default: MB)
-ytm 每个TaskManager内存 (default: MB)

Session模式介绍

需要先在yarn上先分配一个flink集群,后续所有任务都共享这个Flink集群上的资源,该Flink不会因为任务的结束而终止。

先向Yarn申请Flink所需资源

flink客户端目录下,执行如下命令:

bin/yarn-session.sh -jm 1024m -tm 4096m -n 4 -s 
<think>我们有一个用户问题:“我想了解FlinkYARN上的任务提交流程 请问Flink on YARN任务提交流程详解” 根据提供的引用,我们可以总结出Flink on YARN提交流程,并且注意到有三种提交模式:Session模式、Per-Job模式(已废弃)和Application模式(Flink 1.11+)。 由于引用中提到了三种模式,但用户要求详解流程,我们将重点放在通用的流程上,并区分不同模式的特点。 步骤: 1. 首先,Flink on YARN提交流程都依赖于YARN作为资源管理器,因此会通过YARN Client提交应用。 2. 在提交过程中,需要将Flink相关的文件(如Flink的jar包、用户jar包、配置文件等)上传到HDFS,以便YARN的Application Master和Task Manager容器可以下载这些资源。 3. 然后,YARN ResourceManager会为应用分配一个容器来启动Application Master(AM)。在Flink中,AM就是JobManager(在Session模式中)或者Application Master(在Application模式中,它同时运行JobManager和用户程序的main方法)。 4. AM负责申请资源(容器)来启动TaskManager。 5. 任务执行:TaskManager启动后,会向JobManager注册,然后JobManager将任务分配给TaskManager执行。 不同的提交模式: - Session模式:先启动一个Flink集群(集群中包含JobManager和TaskManager),然后提交作业到这个集群。多个作业共享集群资源。 - Per-Job模式(已废弃):每个作业启动一个独立的Flink集群,作业完成后集群释放。在Flink 1.11之后被Application模式取代。 - Application模式:也是每个作业启动一个集群,但是与Per-Job不同的是,Application模式下,用户程序的main方法在JobManager上运行,而不是在客户端运行。这样可以减轻客户端的负担,并且允许在提交作业后客户端可以断开连接。 根据引用[3],Application Mode为每个提交的应用创建一个集群,且main()方法在JobManager上执行。 因此,我们将按以下结构回答: 1. 总体流程(通用步骤) 2. 不同提交模式的区别(Session模式和Application模式,因为Per-Job已废弃) 3. 详细步骤(以Session模式和Application模式为例分别说明) 注意:由于引用中提到了上传文件到HDFS和YARN的LocalResource机制,我们需要在流程中说明。 另外,根据引用[2]中的代码说明,Flink通过YARN Client提交应用,启动AM进行资源申请和任务调度。 我们按照用户要求,使用中文回答,并注意格式要求(数学表达式用$...$,独立公式用$$...$$,但本题可能没有数学公式,所以可以忽略)。同时,在回答末尾生成相关问题。 由于用户要求“尽可能多的参考用户上一次的问题和你的回答”,但这是第一次回答,所以我们只根据当前信息回答。 回答结构: 1. Flink on YARN 任务提交流程概述 2. 详细步骤(分步解释) 3. 不同提交模式的流程差异 4. 总结 最后,生成相关问题。 </think> ### Flink on YARN 任务提交流程详解 Flink on YARN任务提交流程基于 YARN 的资源管理框架实现,核心是通过 YARN Client 提交应用,由 Application Master(AM)协调资源分配和任务调度。以下是详细流程(以 Application 模式为例): #### **1. 资源准备与上传** - 用户通过 `flink run-application` 提交任务时,Flink 客户端会将以下文件上传至 HDFS: - Flink 发行版的 lib/、plugins/ 目录 - 用户 JAR 包(应用程序代码) - 配置文件(flink-conf.yaml) - 文件上传后生成唯一路径(如 `hdfs://.../appId`),供 YARN 节点下载[^1][^2]。 #### **2. 申请 Application Master** - YARN Client 向 ResourceManager (RM) 提交应用请求,申请启动 AM 的容器。 - RM 分配容器后,NodeManager 启动 AM 进程(即 FlinkJobManager)。 ```mermaid graph LR A[Client] -->|1. 提交应用| B[ResourceManager] B -->|2. 分配容器| C[NodeManager] C -->|3. 启动| D[Application Master/JobManager] ``` #### **3. 启动 TaskManager** - AM 向 RM 申请运行 TaskManager 的容器资源(基于用户配置的 Slot 数量)。 - RM 分配容器后,AM 通知 NodeManager 启动 TaskManager 进程。 #### **4. 任务执行** 1. TaskManager 启动后向 JobManager 注册 Slot。 2. JobManager 将用户程序的 JobGraph 解析为执行计划,分发给 TaskManager。 3. **Application 模式特性**:用户程序的 `main()` 方法在 JobManager 上执行(非客户端),生成数据流图并提交执行[^3]。 #### **不同提交模式对比** | **模式** | **资源分配** | **main()执行位置** | **适用场景** | |----------------|--------------------------|---------------------|-------------------------| | **Session 模式** | 预先启动集群,作业共享资源 | 客户端 | 短作业/测试环境 | | **Per-Job 模式** | 每作业独立集群(已废弃) | 客户端 | 资源隔离(被替代) | | **Application 模式** | 每应用独立集群 | JobManager | 生产环境/减轻客户端压力[^3] | #### **关键机制** - **LocalResource**:YARN 将 HDFS 上的文件分发到容器本地,避免重复下载。 - **高可用**:JobManager 异常时,YARN 自动重启 AM 并从检查点恢复任务。 > **流程总结**: 文件上传 → 启动 AM(JobManager)→ 申请资源启动 TaskManager → 注册 Slot → 分发执行计划 → 运行用户代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shadon178

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值