【Flink】运行模式

目录

Standalone 运行模式

独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理,所以独立模式一般只用在开发测试或作业非常少的场景下

会话模式部署

提前启动集群,并通过web页面客户端提交任务(可以多个任务,但是集群资源固定)

单作业模式部署

FlinkStandalone 集群并不支持单作业模式部署,因为单作业模式需要借助一些资源管理平台

应用模式部署

应用模式下不会提前创建集群,所以不能调用start-cluster.sh脚本,我们可以使用同样在bin目录下的standalone-job.sh来创建一个JobManager

具体步骤如下:

监控端口

将应用程序的jar包放到lib目录下

脚本会到lib目录扫描所有的jar

执行以下命令,启动JobManager

clike 复制代码
mv FlinkTutorial-1.17-1.0-SNAPSHOT.jar lib/
clike 复制代码
bin/standalone-job.sh start --job-classname SocketStreamWordCount

启动TaskManager

clike 复制代码
bin/taskmanager.sh start

端口输入数据

webui查看

如果希望停掉集群,同样可以使用脚本,命令如下

clike 复制代码
bin/taskmanager.sh stop
clike 复制代码
bin/standalone-job.sh stop

YARN 运行模式

YARN上部署的过程是:客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器,在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群,Flink会根据运行在JobManager上的作业所需要的Slot数量动态分配TaskManager资源

相关准备和配置

在将Flink任务部署至YARN集群之前,需要确认集群是否安装有Hadoop,保证Hadoop版本至少在2.2以上,并且集群中安装有HDFS服务。

具体配置步骤如下:

  1. 配置环境变量,增加环境变量配置如下:
clike 复制代码
vim /etc/profile

HADOOP_HOME=/usr/local/soft/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`
  1. 使环境生效

    source /etc/profile

  2. 启动Hadoop集群,包括HDFS和YARN。

start-all.sh

会话模式部署

YARN的会话模式与独立集群略有不同,需要首先申请一个YARN会话(YARN Session)来启动Flink集群。具体步骤如下:

1)启动集群

(1)启动Hadoop集群(HDFS、YARN)。

(2)执行脚本命令向YARN集群申请资源,开启一个YARN会话,启动Flink集群。

clike 复制代码
yarn-session.sh -nm mySession1


可用参数解读:

-d:分离模式,如果你不想让Flink YARN客户端一直前台运行,可以使用这个参数,即使关掉当前对话窗口,YARN session也可以后台运行。

-jm(--jobManagerMemory):配置JobManager所需内存,默认单位MB。

-nm(--name):配置在YARN UI界面上显示的任务名。

-qu(--queue):指定YARN队列名。

-tm(--taskManager):配置每个TaskManager所使用内存。

注意:Flink1.11.0版本不再使用-n参数和-s参数分别指定TaskManager数量和slot数量,YARN会按照需求动态分配TaskManager和slot。所以从这个意义上讲,YARN的会话模式也不会把集群资源固定,同样是动态分配的。

webui查看

此时并未提交作业

使用

webui提交作业

可以看到动态分配了taskmanager

通过命令行提交

clike 复制代码
flink run -m slave1:8081 -c SocketStreamWordCount ../lib/FlinkTutorial-1.17-1.0-SNAPSHOT.jar

如何关闭会话?

方式一:

开启会话前

开启会话后:

点到任务里面去,点击Kill Application即可关闭

关闭会话后:

方式二:

重新开启会话

clike 复制代码
bin/yarn-session.sh -nm session2 -d

最下面有提示如何关闭

输入该命令关闭即可

clike 复制代码
echo "stop" | ./bin/yarn-session.sh -id application_1756024822319_0007

关闭成功

单作业模式部署

提交作业时才启动Flink集群

在YARN环境中,由于有了外部平台做资源调度,所以我们也可以直接向YARN提交一个单独的作业,从而启动一个Flink集群

执行命令提交作业

clike 复制代码
bin/flink run -d -t yarn-per-job -c SocketStreamWordCount lib/FlinkTutorial-1.17-1.0-SNAPSHOT.jar

注意:如果启动过程中报如下异常。

Exception in thread "Thread-5" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the stacktrace suggests that the leak occurs in a third party library and cannot be fixed immediately, you can disable this check with the configuration 'classloader.check-leaked-classloader'.

at org.apache.flink.runtime.execution.librarycache.FlinkUserCodeClassLoaders

解决办法:在 flink 的 /opt/module/flink-1.17.0/conf/flink-conf.yaml 配置文件中设置

clike 复制代码
 vim flink-conf.yaml
clike 复制代码
classloader.check-leaked-classloader: false

可以使用命令行查看或取消作业,命令如下。

bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY

bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY

这里的application_XXXX_YY是当前应用的ID,是作业的ID。注意如果取消作业,整个Flink集群也会停掉。

应用模式部署

命令行提交

clike 复制代码
bin/flink run-application -t yarn-application -c SocketStreamWordCount lib/FlinkTutorial-1.17-1.0-SNAPSHOT.jar

在命令行中查看或取消作业。

clike 复制代码
bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
clike 复制代码
bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

上传HDFS提交

可以通过yarn.provided.lib.dirs配置选项指定位置,将flink的依赖上传到远程。

(1)上传flink的lib和plugins到HDFS上

clike 复制代码
 hadoop fs -mkdir /flink-dist
clike 复制代码
hadoop fs -put lib/ /flink-dist
clike 复制代码
hadoop fs -put plugins/ /flink-dist

(2)上传自己的jar包到HDFS

clike 复制代码
hadoop fs -mkdir /flink-jars
hadoop fs -put FlinkTutorial-1.0-SNAPSHOT.jar /flink-jars

(3)提交作业

bin/flink run-application -t yarn-application -Dyarn.provided.lib.dirs="hdfs://master:8020/flink-dist" -c SocketStreamWordCount hdfs://master:8020/flink-jars/FlinkTutorial-1.0-SNAPSHOT.jar

这种方式下,flink本身的依赖和用户jar可以预先上传到HDFS,而不需要单独发送到集群,这就使得作业提交更加轻量了。

K8S运行模式

容器化部署是如今业界流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Flink也在最近的版本中支持了k8s部署模式。基本原理与YARN是类似的