Flink (四) Flink 的安装和部署- Flink on Yarn 模式 / 集群HA / 并行度和Slot

接上一篇 Flink (三) Flink 的安装和部署- -Standalone模式

3. Flink  提交到 Yarn

Flink on Yarn 模式的原理是依靠 YARN 来调度 Flink 任务,目前在企业中使用较多。这种模式的好处是可以充分利用集群资源,提高集群机器的利用率,并且只需要 1 套 Hadoop集群,就可以执行 MapReduce 和 Spark 任务,还可以执行 Flink 任务等,操作非常方便,不需要维护多套集群,运维方面也很轻松。Flink on Yarn 模式需要依赖 Hadoop 集群,并且Hadoop 的版本需要是 2.2 及以上。我们的课程里面选择的 Hadoop 版本是 2.7.2。

Flink On Yarn 的内部实现原理:

a、 当启动一个新的 Flink YARN Client 会话时,客户端首先会检查所请求的资源(容器和内存)是否可用。之后,它会上传 Flink 配置和 JAR 文件到 HDFS。

b、 客 户 端的 下 一 步是 请 求 一个 YARN 容 器 启动 ApplicationMaster 。 JobManager 和ApplicationMaster(AM)运行在同一个容器中,一旦它们成功地启动了,AM 就能够知道
JobManager 的地址,它会为 TaskManager 生成一个新的 Flink 配置文件(这样它才能连上 JobManager),该文件也同样会被上传到 HDFS。另外,AM 容器还提供了 Flink 的Web 界面服务。Flink 用来提供服务的端口是由用户和应用程序 ID 作为偏移配置的,这使得用户能够并行执行多个 YARN 会话。

c、 之后,AM 开始为 Flink 的 TaskManager 分配容器(Container),从 HDFS 下载 JAR 文件和修改过的配置文件。一旦这些步骤完成了,Flink 就安装完成并准备接受任务了。

Flink  on n Yarn  模式在使用的时候又可以分为两种 :

 第 1 种模式(Session-Cluster):是在 YARN 中提前初始化一个 Flink 集群(称为 Flink yarn-session),开辟指定的资源,以后的 Flink 任务都提交到这里。这个 Flink 集群会常驻在 YARN 集群中,除非手工停止。这种方式创建的 Flink 集群会独占资源,不管有没有 Flink 任务在执行,YARN 上面的其他任务都无法使用这些资源。

第 2 种模式(Per-Job-Cluster):每次提交 Flink 任务都会创建一个新的 Flink 集群,每个 Flink 任务之间相互独立、互不影响,管理方便。任务执行完成之后创建的 Flink集群也会消失,不会额外占用资源,按需使用,这使资源利用率达到最大,在工作中推荐使用这种模式。

注意:Flink on Yarn 还需要两个先决条件:

a、 配置 Hadoop 的环境变量

b、 下载 Flink 提交到 Hadoop 的连接器(jar 包),并把 jar 拷贝到 Flink 的 lib 目录下

1) Session-Cluster  模式( yarn-session )

1 先启动 Hadoop 集群,然后通过命令启动一个 Flink 的 yarn-session 集群:

bin/yarn-session.sh -n 3 -s 3 -nm bjsxt -d

其中 yarn-session.sh 后面支持多个参数。下面针对一些常见的参数进行讲解:

a、 -n,--container <arg> 表示分配容器的数量(也就是 TaskManager 的数量)。

b、 -D <arg> 动态属性。

c、 -d,--detached 在后台独立运行。

d、 -jm,--jobManagerMemory <arg>:设置 JobManager 的内存,单位是 MB。

e、 -nm,--name:在 YARN 上为一个自定义的应用设置一个名字。

f、 -q,--query:显示 YARN 中可用的资源(内存、cpu 核数)。

g、 -qu,--queue <arg>:指定 YARN 队列。

h、 -s,--slots <arg>:每个 TaskManager 使用的 Slot 数量。

r、 -tm,--taskManagerMemory <arg>:每个 TaskManager 的内存,单位是 MB。

j、 -z,--zookeeperNamespace <arg>:针对 HA 模式在 ZooKeeper 上创建 NameSpace。

k、 -id,--applicationId <yarnAppId>:指定 YARN 集群上的任务 ID,附着到一个后台独立运行的 yarn session 中。

2 查看 WebUI: 由于还没有提交 Flink job,所以都是 0。

这个时候注意查看本地文件系统中有一个临时文件。有了这个文件可以提交 job 到 Yarn

3 提交 Job : 由于有了之前的配置,所以自动会提交到 Yarn 中。

bin/flink run -c com.bjsxt.flink.StreamWordCount /home/Flink-Demo-1.0-SNAPSHOT.jar

至此第一种模式全部完成。

2) Pre-Job-Cluster  模式(yarn-cluster)

这种模式下不需要先启动 yarn-session。所以我们可以把前面启动的 yarn-session 集群先停止,停止的命令是:

yarn application -kill application_1576832892572_0002

//其中 application_1576832892572_0002 是ID

确保 Hadoop 集群是健康的情况下直接提交 Job 命令:

bin/flink run -m yarn-cluster -yn 3 -ys 3 -ynm bjsxt02 -c

com.bjsxt.flink.StreamWordCount /home/Flink-Demo-1.0-SNAPSHOT.jar

可以看到一个全新的 yarn-session

任务提交参数讲解:相对于 Yarn-Session 参数而言,只是前面加了 y。

a、 -yn,--container <arg> 表示分配容器的数量,也就是 TaskManager 的数量。

b、 -d,--detached:设置在后台运行。

c、 -yjm,--jobManagerMemory<arg>:设置 JobManager 的内存,单位是 MB。

d、 -ytm,--taskManagerMemory<arg>:设置每个 TaskManager 的内存,单位是 MB。

e、 -ynm,--name:给当前 Flink application 在 Yarn 上指定名称。

f、 -yq,--query:显示 yarn 中可用的资源(内存、cpu 核数)

g、 -yqu,--queue<arg> :指定 yarn 资源队列

h、 -ys,--slots<arg> :每个 TaskManager 使用的 Slot 数量。

i、 -yz,--zookeeperNamespace<arg>:针对 HA 模式在 Zookeeper 上创建 NameSpace

j、 -yid,--applicationID<yarnAppId> : 指定 Yarn 集群上的任务 ID,附着到一个后台独立运行的 Yarn Session 中。

4. Flink 的 的 HA

默认情况下,每个 Flink 集群只有一个 JobManager,这将导致单点故障(SPOF),如果这个 JobManager 挂了,则不能提交新的任务,并且运行中的程序也会失败。使用JobManager HA,集群可以从 JobManager 故障中恢复,从而避免单点故障。用户可以在Standalone 或 Flink on Yarn 集群模式下配置 Flink 集群 HA(高可用性)。

Standalone 模式下,JobManager 的高可用性的基本思想是,任何时候都有一个 Alive JobManager 和多个 Standby JobManager。Standby JobManager 可以在 Alive JobManager挂掉的情况下接管集群成为 Alive JobManager,这样避免了单点故障,一旦某一个 StandbyJobManager 接管集群,程序就可以继续运行。Standby JobManagers 和 Alive JobManager实例之间没有明确区别,每个 JobManager 都可以成为 Alive 或 Standby。

1) Flink Standalone  集群的 HA  安装和配置( 目前测试 1.9  版本有 bug)

实现 HA 还需要依赖 ZooKeeper 和 HDFS,因此要有一个 ZooKeeper 集群和 Hadoop 集群,

首先启动 Zookeeper 集群和 HDFS 集群。我们的课程中分配 3 台 JobManager,如下表:

hadoop101hadoop102hadoop103
JobManagerJobManagerJobManager
TaskManagerTaskManagerTaskManager

1 修改配置文件 conf/masters

2 修改配置文件 conf/flink-conf.yaml

#要启用高可用,设置修改为zookeeper

high-availability: zookeeper

#Zookeeper的主机名和端口信息,多个参数之间用逗号隔开

high-availability.zookeeper.quorum:

hadoop103:2181,hadoop101:2181,hadoop102:2181

# 建议指定HDFS的全路径。如果某个Flink节点没有配置HDFS的话,不指定HDFS的全路径则无法识到,storageDir存储了恢复一个JobManager所需的所有元数据。

high-availability.storageDir: hdfs://hadoop101:9000/flink/h

3 把修改的配置文件拷贝其他服务器中

[root@hadoop101 conf]# scp masters flink-conf.yaml root@hadoop102:`pwd`

[root@hadoop101 conf]# scp masters flink-conf.yaml root@hadoop103:`pwd`

4 启动集群

版本问题:目前使用 Flink1.7.1 版本测试没有问题,使用 Flink1.9 版本存在 HA 界面不能自动跳转到对应的 Alive JobManager 的现象。

2) Flink On Yarn HA  安装和配置

正常基于 Yarn 提交 Flink 程序,无论是使用 yarn-session 模式还是 yarn-cluster 模式 , 基 于 yarn 运 行 后 的 application 只 要 kill 掉 对 应 的 Flink 集 群 进 程“YarnSessionClusterEntrypoint”后,基于 Yarn 的 Flink 任务就失败了,不会自动进行重试,所以基于 Yarn 运行 Flink 任务,也有必要搭建 HA,这里同样还是需要借助 zookeeper来完成,步骤如下:

1 修改所有 Hadoop 节点的 yarn-site.xml

将所有 Hadoop 节点的 yarn-site.xml 中的提交应用程序最大尝试次数调大

#在每台hadoop节点yarn-site.xml中设置提交应用程序的最大尝试次数,建议不低于4,这里重试指的是ApplicationMaster
<property>
      <name>yarn.resourcemanager.am.max-attempts</name>
      <value>4</value>
</property>

2 启动 Hadoop 集群

启动 zookeeper,启动 Hadoop 集群。

3 修改 Flink 对应 flink-conf.yaml 配置

配置对应的 conf 下的 flink-conf.yaml,配置内容如下:

#配置依赖zookeeper模式进行HA搭建
high-availability: zookeeper
#配置JobManager原数据存储路径
high-availability.storageDir: hdfs://hadoop101:9000/flink/yarnha/
#配置zookeeper集群节点
high-availability.zookeeper.quorum:
hadoop101:2181,hadoop102:2181,hadoop103:2181
#yarn停止一个application重试的次数
yarn.application-attempts: 10

 

4 启动 yarn-session.sh 测试 HA: yarn-session.sh -n 2 ,也可以直接提交 Job启动之后,可以登录 yarn 中对应的 flink webui,如下图示:

点击对应的 Tracking UI,进入 Flink 集群 UI:

查看对应的 JobManager 在哪台节点上启动:

进入对应的节点,kill 掉对应的“YarnSessionClusterEntrypoint”进程。然后进入到 Yarn中观察“applicationxxxx_0001”job 信息:

点击 job ID,发现会有对应的重试信息:

点击对应的“Tracking UI”进入到 Flink 集群 UI,查看新的 JobManager 节点由原来的hadoop103 变成了 hadoop101,说明 HA 起作用。

5. Flink  并行度和 Slot

Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程(Solt)上执行一个或多个 subtask。Flink 的每个 TaskManager 为集群提供 Solt。Solt 的数量通常与每个 TaskManager 节点的可用 CPU 内核数成比例,一般情况下 Slot 的数量就是每个节点的 CPU 的核数。

Slot 的 数 量 由 集 群 中 flink-conf.yaml 配 置 文 件 中 设 置taskmanager.numberOfTaskSlots 的值为 3,这个值的大小建议和节点 CPU 的数量保持一致。

一个任务的并行度设置可以从 4 个层面指定:

a、Operator Level(算子层面)。

b、 Execution Environment Level(执行环境层面)。

c、 Client Level(客户端层面)。

d、 System Level(系统层面)。

这 些 并 行 度 的 优 先 级 为 Operator Level>Execution Environment Level>Client Level>System Level。

1) 并行度设置之 Operator Level

Operator、Source 和 Sink 目的地的并行度可以通过调用 setParallelism()方法来指定

2) 行度设置之 Execution Environment Level

任务的默认并行度可以通过调用 setParallelism()方法指定。为了以并行度 3 来执行所有的 Operator、Source 和 Sink,可以通过如下方式设置执行环境的并行度

3) 并行度设置之 Client Level

并行度还可以在客户端提交 Job 到 Flink 时设定。对于 CLI 客户端,可以通过-p 参数指定并行度。

4) 并行度设置之 System Level

在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度。

5) 并行度 案例分析

Flink 集群中有 3 个 TaskManager 节点,每个 TaskManager 的 Slot 数量为 3

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Flink on Yarn安装部署包括以下步骤: 1. 安装 Hadoop 和 Yarn,并确保它们正常运行。 2. 下载 Flink 的 binary release 或者源码编译。 3. 配置 flink-conf.yaml 文件,设置 yarn 集群的相关参数。 4. 启动 Flink on yarn,使用命令: "./bin/yarn-session.sh -n <number of task managers> -jm <jobmanager memory> -tm <taskmanager memory>" 5. 在 Flink web UI 中检查集群状态。 注意:以上步骤仅是大致的安装流程,详细的配置参数和步骤可以参考 Flink 官方文档。 ### 回答2: Flink on YARN是一种分布式运行模式,可以在YARNHadoop的资源管理器)上运行Flink作业。下面是安装部署Flink on YARN的步骤。 1. 准备环境:首先,需要确保所有节点都运行着相同的Hadoop和Flink版本。在所有节点上安装Hadoop和Flink,并设置好JAVA_HOME、HADOOP_HOME和FLINK_HOME环境变量。 2. 配置YARN:在Hadoop集群上,需要配置YARN以支持Flink on YARN。在yarn-site.xml文件中,需要设置一些参数,如yarn.nodemanager.resource.memory-mb、yarn.scheduler.minimum-allocation-mb和yarn.scheduler.maximum-allocation-mb等,这些参数决定了YARN可以分配的资源。 3. 配置Flink:在Flink的conf/flink-conf.yaml文件中,需要设置一些参数,如jobmanager.rpc.address、jobmanager.rpc.port、taskmanager.memory.process.size和yarn.application-name等,这些参数决定了Flink on YARN可以使用的资源和配置。 4. 部署Flink on YARN:可以使用yarn-session.sh脚本来启动Flink on YARN。首先,需要在Hadoop集群上启动一个Flink集群,然后运行yarn-session.sh脚本,该脚本会向YARN提交一个作业,并启动Flink on YARN会话。可以使用以下命令启动Flink on YARN: ``` ./bin/yarn-session.sh -n <num_task_managers> -tm <tm_memory> -s <slots> -d ``` 其中,num_task_managers指定了需要启动多少个TaskManager实例,tm_memory指定每个TaskManager实例可用的内存,slots指定每个TaskManager实例可以运行的任务数,-d表示该会话将在后台运行。 5. 运行Flink on YARN作业:在Flink on YARN会话中,可以使用Flink命令行工具或Web UI提交和管理作业。可以使用以下命令提交Flink作业: ``` ./bin/flink run -m yarn-cluster -ynm <job_name> <jar_file> <program_args> ``` 其中,-m yarn-cluster指定了作业管理器运行在YARN集群上,-ynm指定作业名称,jar_file指定要运行的JAR文件,program_args指定该程序的参数。作业将会被提交到YARN集群,并由Flink on YARN管理器分配任务并运行。 以上就是部署Flink on YARN的步骤,通过这种方式,可以更好地利用Hadoop集群的计算资源,以及Flink的高性能计算能力。同时,也可以通过管理器的监控和管理功能,更加方便地调试和管理Flink应用。 ### 回答3: Apache Flink是一个流处理引擎,可以在大数据环境中进行流式数据处理,支持高容错性和高吞吐量。而Apache Hadoop YARN是Apache Hadoop生态系统中的资源管理器,可用于管理计算资源。 Flink on YARN是将Flink集成到YARN中,以便更好地管理Flink作业的资源和调度。下面我将介绍如何安装部署Flink on YARN。 首先,我们需要准备以下环境: 1. 安装Hadoop(版本必须与Flink相同)。 2. 在Flink官网上下载Flink二进制文件。 接下来,我们将进行以下步骤: 1. 将Flink二进制文件复制到YARN节点上。 2. 编辑Flinkyarn-site.xml文件。该文件位于Flink/conf目录下。在文件中,我们需要配置以下属性: a. yarn.application.classpath:指定Flink作业所需的依赖项。 b. yarn.application-attempts:指定Flink作业的重试次数。 c. yarn.resourcemanager.scheduler.address:指定YARNResourceManager的地址。 3. 启动Flink on YARN。输入以下命令即可启动: ./bin/yarn-session.sh -n <Number of TaskManager> -jm <Job Manager Memory> -tm <TaskManager Memory> 其中,-n指定TaskManager数量,-jm指定JobManager内存,-tm指定TaskManager内存。 4.使用Flink on YARN提交作业。输入以下命令即可提交作业: ./bin/flink run -m yarn-cluster <Flink Pipeline Jar> 其中,-m指定作业管理器的地址。yarn-cluster指定以YARN模式运行作业。 以上就是Flink on YARN安装部署过程。在这个过程中,我们需要了解FlinkYARN的结合方式,以便更好地管理Flink作业。Flink on YARN可以帮助我们轻松地管理和部署Flink作业,提高作业的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

plenilune-望月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值