Flink流批一体计算(5):部署运行模式

目录

集群运行模式

1.local模式

2.standalone模式

3.Flink on YARN模式

本地模式

Standalone 模式

Flink on Yarn 模式


集群运行模式

类似于SparkFlink也有各种运行模式,其中主要支持三种:local模式、standalone模式以及Flink on YARN模式。

每种模式都有特定的使用场景,接下来一起了解一下各种运行模式。

1.local模式

适用于测试调试。Flink可以运行在LinuxmacOSWindows系统上。local模式的安装唯一需要的是Java 1.7.x或更高版本,运行时会启动JVM,主要用于调试代码,一台服务器即可运行。

2.standalone模式

适用于Flink自主管理资源。Flink自带集群模式standalone,主要是将资源调度管理交给Flink集群自己来处理。standalone是一种集群模式,可以有一个或者多个主节点(JobManagerHA模式,用于资源管理调度、任务管理、任务划分等工作),多个从节点(TaskManager,主要用于执行JobManager分解出来的任务)。

3.Flink on YARN模式

使用YARN来统一调度和管理资源,一般在学习研究环节或资源不充足的情况下,采用local模式部署即可,生产环境中Flink on YARN模式比较常见。

Flink on YARN任务提交的工作流程见下一节。

本地模式

Flink的local模式部署安装

在local模式下,不需要启动任何的进程,仅仅是使用本地线程来模拟flink的进程,适用于测试开发调试等,这种模式下,不用更改任何配置,只需要保证jdk8安装正常即可。

前提条件:

Java 1.8+

部署步骤:

1.下载安装包并解压,下载版本较新且稳定的版本:

# wget https://archive.apache.org/dist/flink/flink-1.16.0/flink-1.16.0-bin-scala_2.12.tgz

进行解压

# tar -zxf flink-1.16.0-bin-scala_2.12.tgz

2.直接使用脚本启动

flink在处于local模式下,不需要更改任何配置,直接解压之后启动即可

执行以下命令直接启动local模式

cd /data-ext/flink-1.16.0
bin/start-cluster.sh

关闭local模式

cd /data-ext/flink-1.16.0
bin/stop-cluster.sh

3.启动成功之后进行检查

执行jps就能查看到启动了两个进程

# jps

23792 TaskManagerRunner

23514 StandaloneSessionClusterEntrypoint

webUI界面访问

启动两个进程成功之后,访问8081端口号即可访问到flink的web管理界

http://master:8081/#/overview

4. 运行flink自带的测试

master使用linux的nc命令来向socket当中发送一些单词。

nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat。

# sudo yum -y install nc
# nc -lk 8000

打开master另一个窗口,启动flink的自带的单词统计程序,接受输入的socket数据并进行统计

cd /data-ext/flink-1.16.0
bin/flink run examples/streaming/SocketWindowWordCount.jar   --hostname localhost  --port 8000

查看统计结果:

flink自带的测试用例统计结果在log文件夹下面

master执行以下命令查看统计结果

cd /data-ext/flink-1.16.0/log
tail -200f flink-root-taskexecutor-0-VM-0-9-centos.out

Standalone 模式

Standalone 模式是集群模式的一种,但是这种模式一般并不运行在生产环境中,原因和 on yarn 模式相比:

Standalone 模式的部署相对简单,可以支持小规模,少量的任务运行;

Stabdalone 模式缺少系统层面对集群中 Job 的管理,容易遭成资源分配不均匀;

资源隔离相对简单,任务之间资源竞争严重。

前提条件:

准备两台服务器,一台用来管理任务(JobManager),一台用来执行任务(TaskManager )

管理任务的服务器一台即可,执行任务的服务器后续可根据实际需求无限制扩充节点

每台服务器安装java 1.8,且设置JAVA_HOME

实现两台服务器之间ssh免密登录

服务器列表:

NAME

IP

OS-IMAGE

Java

master

192.168.0.220

el7.x86_64

1.8.0_291

node01

192.168.0.6

el7.x86_64

1.8.0_291

node02

192.168.0.8

el7.x86_64

1.8.0_291

部署步骤

1.解压1.16.0版本的flink文件

2.配置系统环境变量

# vim /etc/profile

export FLINK_HOME=/data-ext/flink-1.16.0

export PATH=$PATH:$FLINK_HOME/bin

刷新系统环境变量,使之生效

# source /etc/profile

3. 编辑conf文件

输入指令 cd flink-1.16.0/conf/  进入conf目录

输入指令 vim flink-conf.yaml 编辑conf文件,这个文件是核心配置文件

jobmanager.rpc.address

配置jobmanager rpc 地址

选择一个节点作为master节点(JobManager),设置jobmanager.rpc.address 配置项为该节点的IP或者主机名。

确保所有节点有有一样的jobmanager.rpc.address 配置。

  • 修改taskmanager内存大小

taskmanager.memory.process.size: 2048m

taskmanager.numberOfTaskSlots

修改taskmanager的taskslot个数,Flink中每台服务器的卡槽可以在conf文件中配置,默认是1

我们修改为2 ,如果此值大于1,TaskManager可以使用多个CPU内核,单个TaskManager会将获取函数或运算符并行运行。

修改并行度

parallelism.default: 4

4.配置master

vim masters

master:8081

5. 编辑workers

输入 vim workers 编辑该文件,这个文件用来配置flink集群子节点,默认localhost

与HDFS配置类似,编辑文件conf/slaves并输入每个工作节点的IP/主机名,多个节点就换行写入多个。每个工作节点稍后将运行TaskManager。

master负担重的话,依然可以选择master不作为TaskManager节点(去掉localhost)。

# vim workers

Node01

Node02

5. 分发配置文件

通过 scp 将配置文件分发到子服务器即可

6. 服务启动与停止

启动集群:

bin/start-cluster.sh

jps查看进程

关闭集群:

bin/stop-cluster.sh

7. HA配置

7.1服务器节点设计

主节点

从节点

部署方式

master

node01

Standalone-HA

7.2 配置环境变量

# vim /etc/profile

export HADOOP_HOME=/data-ext/hadoop-3.2.4

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/Hadoop

刷新系统变量环境

# source /etc/profile

7.3 编辑conf/ flink-conf.yaml,配置flink

# vim conf/flink-conf.yaml

7.3.1 配置zoo

新建snapshot存放的目录,在FLINK_HOME目录下执行

# mkdir -p tmp/zookeeper

修改conf下zoo.cfg配置

# vim zoo.cfg

# The directory where the snapshot is stored.

dataDir=/data-ext/flink-1.16.0/tmp/zookeeper

# The port at which the clients will connect

clientPort=2181

# ZooKeeper quorum peers

server.1=master:2888:3888

Flink on Yarn 模式

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

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

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

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

部署步骤:

1.修改conf/flink-conf.yaml配置,添加如下两项:

#用户提交作业失败时,重新执行次数

yarn.application-attempts: 4

#设置Task在所有节点平均分配

cluster.evenly-spread-out-slots: true

2. 下载hadoop依赖包,并包复制到flink的lib目录下

 flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar

3. 启动测试(session模式)

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

# 主节点中执行

bin/yarn-session.sh -d -jm 1024 -tm 1024 -s 1

-tm 表示每个 TaskManager 的内存大小

-s 表示每个 TaskManager 的 slots 数量

-d 表示以后台程序方式运行

注意:此时提交的任务都通过该会话(session)执行,不会再申请yarn资源

查看正在运行的任务列表

yarn application -list

4.测试

  1. 创建一个文本文件words.txt

we think we can do it by ourself.

we can not think we can guess ourself.

think think think

we can think, so we can do it.

  1. 将文件上传到hdfs上
# hdfs dfs -copyFromLocal  words.txt  /
  1. 通过session模式,在yarn上提交任务
# bin/flink run examples/batch/WordCount.jar --input hdfs://master:8020/wordcount.txt

5. 关闭session模式,杀掉正在运行的任务

yarn application kill

猜你喜欢

转载自blog.csdn.net/victory0508/article/details/131361901