Flink on yarn三种部署模式及区别

 在 Flink on YARN 运行模式下,Flink 提供了三种主要的部署模式:Session模式Per-Job模式Application模式。每种模式在集群管理、资源分配、作业执行等方面有不同的特点,适用于不同的场景。接下来详细介绍这三种部署模式及其适用场景。

1.Session模式

Session模式需预先在yarn启动一个Flink集群,启动JobManager,暂不启动TaskManager和Slot,后续任务提交时向Yarn申请资源,启动TaskManager和Slot。任务完成后释放TaskManager和Slot,所有任务共享Flink集群资源。这个Flink集群会常驻在yarn集群中,除非手工停止。

特点:

1.共享集群,一个集群运行多个作业

2.需要事先申请资源,使用Flink中的yarn-session(yarn客户端),启动JobManager和TaskManger,

3.不需要每次递交作业申请资源,而是使用已经申请好的资源,从而提高执行效率

缺点:

1.如果某一个任务出现了问题导致整个集群挂掉,那就得重启集群中的所有任务。

2.在向Flink集群提交Job时, 如果资源被用完,则新的Job无法提交,等待资源释放。

适用场景:Session模式适合那些需要频繁提交的多个小Job, 并且执行时间都不长的Job.

启动命令:

bin/yarn-session.sh \
-d \
-jm 1024 \
-tm 1024 \
-nm yarn-session-flink \
-qu flink \
-s 8

bin/flink run examples/batch/WordCount.jar

bin/yarn-session.sh 
可用参数解读:
-d:分离模式,如果你不想让Flink YARN客户端一直前台运行,可以使用这个参数,即使关掉当前对话窗口,YARN session也可以后台运行。
-jm(–jobManagerMemory):配置JobManager所需内存,默认单位MB。
-tm(–taskManager):配置每个TaskManager所使用内存,默认单位MB。
-nm(–name):配置在YARN UI界面上显示的任务名。
-qu(–queue):指定YARN队列名。
‌-s  (slots): 指定每个TaskManager的槽位数。

2.Per-Job模式

一个Job会对应一个Flink集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享资源,按需申请资源。

特点:

  • 独享集群,一个作业一个集群
    • 每次提交作业时,都会启动一个独立的 Flink 集群,包括一个独立的 JobManager 和多个 TaskManager
    • 作业执行完毕后,整个集群会被销毁。

适用场景:Per-Job模式一般用来部署那些长时间运行的作业。

启动命令:

./bin/flink run \
# 指定yarn的Per-job模式,-t等价于-Dexecution.target
-t yarn-per-job \
# yarn应用的自定义name
-Dyarn.application.name=wordcount \
# 未指定并行度时的默认并行度值, 该值默认为1
-Dparallelism.default=3 \
# JobManager堆的内存
-Djobmanager.memory.process.size=2048mb \
# TaskManager堆的内存
-Dtaskmanager.memory.process.size=2048mb \
# 每个TaskManager的slot数目, 最佳配比是和vCores保持一致
-Dtaskmanager.numberOfTaskSlots=2 \
# 防止日志中文乱码
-Denv.java.opts="-Dfile.encoding=UTF-8" \
# 支持火焰图, Flink1.13新特性, 默认为false, 开发和测试环境可以开启, 生产环境建议关闭
-Drest.flamegraph.enabled=true \
# 入口类
-c xxxx.MainClass \
# 提交Job的jar包
xxxx.jar

3.Application模式

flink-1.11 引入了一种新的部署模式,即 Application 模式。

Session模式:所有作业共享集群资源,隔离性差,JM 负载瓶颈,main 方法在客户端执行。
Per-Job模式:每个作业单独启动集群,隔离性好,JM 负载均衡,main 方法在客户端执行。

Application模式和Per-Job的区别: 就是Application模式下, 用户的main函数是在集群中执行的

启动命令:

./bin/flink run-application \
#部署目标
-t yarn-application \
#类的全包名
-c xxxx.MainClass \
#并发数
-Dparallelism.default=3  \  #也可以使用 -p 3
#JobManager 内存
-Djobmanager.memory.process.size=2048m \
#TaskManager 内存
-Dtaskmanager.memory.process.size=4096m \
#作业名字
-Dyarn.application.name="MyFlinkWordCount" \
#TaskManager slot数量
-Dtaskmanager.numberOfTaskSlots=3 \
#flink客户端依赖包上传地址
-Dyarn.provided.lib.dirs="hdfs://$NameNode:$port/remote-flink-dist-dir/lib;hdfs://myhdfs/remote-flink-dist-dir/plugins" \
#作业jar包上传地址
hdfs://$NameNode:$port/job/jars/MyApplication.jar

4.三种方式区别:

session:所有作业在一个集群,集群生命周期独立于集群上运行的任何作业的生命周期,并且资源在所有作业之间共享;集群只有一个JobManager,所以JobManager容易有负载瓶颈;main方法在客户端执行;

per-job:每个作业启动一个独立的集群,集群的生命周期与作业的生命周期绑定在一起,资源隔离有更好的保证;每个独立的集群都有一个Jobmanager,所以JoobManager负载均衡;main方法在客户端执行;

application:每个应用程序创建一个会话集群,集群的生命周期与应用的生命周期绑定在一起,集群中特定的作业之间共享资源,在应用粒度上资源隔离有保证;每个集群都有一个JobManager,所以JobManager负载均衡;main方法在集群上执行;

<think>嗯,用户想了解如何在YARN部署Flink,也就是Flink on YARN部署教程。我需要根据提供的引用内容,整理出一个清晰的步骤指南。首先,我应该先确认用户的需求是什么。他们可能是一个刚开始接触Flink大数据工程师,或者是想要将现有的Flink任务迁移到YARN上运行。用户可能对YARNFlink的基本概念有一定了解,但需要具体的部署步骤和配置说明。 接下来,我需要查看用户提供的引用内容。引用[1]提到准备工作,比如Hadoop集群、环境变量和依赖包。引用[2]和[3]讨论了Session-Cluster模式,包括如何启动yarn-session和提交任务。引用[4]提到了Application模式,使用run-application命令。引用[5]则涉及Hadoop依赖包的处理,需要用户自己下载并放置到lib目录下。 用户的问题是如何在YARN部署Flink,所以需要覆盖两种主要的部署模式:Session-Cluster和Application Mode。同时,必须确保每个步骤都正确,特别是关于依赖项和配置的部分。可能需要注意的常见问题包括依赖包缺失、Hadoop配置不正确,或者资源分配的问题。 首先,我应该列出部署前的准备工作,如安装Hadoop、配置环境变量、处理Hadoop依赖。然后分别讲解两种部署模式的具体步骤,包括启动集群和提交任务。可能还需要给出示例命令,这样用户可以直接复制使用。此外,需要注意不同模式下资源管理的区别,比如Session-Cluster是常驻的,而Application Mode是任务级别的。 在引用内容中,引用[5]提到需要用户自行下载Hadoop依赖包,并放到Flink的lib目录下。这一点很重要,否则可能会遇到类找不到的错误。需要详细说明这一步,包括下载地址的位置,可能用户需要访问提供的链接或文档来获取正确的依赖包。 另外,提交任务的命令有所不同,Session-Cluster使用flink run,而Application Mode使用flink run-application,并且需要指定Dyarn.provided.lib.dirs参数,引用HDFS上的Flink分发目录。这部分需要明确说明,避免用户混淆。 可能用户还会遇到资源不足的问题,所以在步骤中可以提醒调整资源参数,比如内存和slot数量。同时,需要检查YARN集群的状态,确保Hadoop服务正常运行,否则部署会失败。 最后,生成相关问题的时候,可以考虑用户可能进一步想知道如何优化部署、处理依赖冲突,或者监控Flink任务在YARN上的运行情况。这些问题有助于用户深入学习和解决问题。 现在需要将以上思路整理成一个结构化的回答,分步骤说明,确保每个部分都引用正确的来源,并在末尾添加相关问题。同时,要保持语言简洁,使用中文,符合用户的要求。</think>### Flink on YARN 部署教程 #### 一、部署前准备 1. **Hadoop集群环境** 确保已部署Hadoop集群(版本需与Flink兼容),并启动YARN服务。可通过`jps`命令检查`ResourceManager`和`NodeManager`是否正常运行[^2]。 2. **Flink环境配置** - 下载与Hadoop兼容的Flink版本,并解压到指定目录。 - 配置环境变量: ```bash export HADOOP_CLASSPATH=`hadoop classpath` # 确保Hadoop依赖正确加载[^5] ``` 3. **Hadoop依赖包处理** - 从Flink官网提供的地址下载与Hadoop版本对应的依赖包(如`flink-shaded-hadoop-3-uber.jar`)[^5]。 - 将依赖包复制到Flink的`lib`目录下,否则无法访问HDFS或YARN资源。 --- #### 二、两种部署模式详解 ##### 1. **Session-Cluster模式(常驻集群)** - **特点**:预先分配固定资源,任务共享集群,适合短时高频任务。 - **启动集群**: ```bash ./bin/yarn-session.sh -n 2 -s 2 -jm 1024 -tm 2048 -nm myFlinkSession ``` - `-n`:TaskManager数量 - `-s`:每个TaskManager的Slots数量 - `-nm`:YARN Application名称 - **提交任务**: ```bash flink run examples/streaming/TopSpeedWindowing.jar # 使用已启动的Session集群[^3] ``` ##### 2. **Application Mode(按需集群)** - **特点**:每个任务独立集群,资源按需分配,避免资源竞争[^4]。 - **提交任务**: ```bash ./bin/flink run-application -t yarn-application \ -Dyarn.provided.lib.dirs="hdfs:///flink/libs" \ hdfs:///jars/my-flink-job.jar ``` - `-Dyarn.provided.lib.dirs`:指定HDFS上的Flink依赖目录(需提前上传)[^4]。 --- #### 三、关键注意事项 1. **依赖包冲突** 若出现Hadoop类冲突,检查`lib`目录中是否仅保留**一个**Hadoop依赖包[^5]。 2. **资源参数调整** - 根据集群资源调整`-jm`(JobManager内存)、`-tm`(TaskManager内存)参数。 - 资源不足会导致YARN任务提交失败。 3. **日志查看** 任务日志可通过YARN Web UI(`http://<ResourceManager>:8088`)或`yarn logs -applicationId <appId>`查看。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值