【Flink】运行模式
目录
- Standalone 运行模式
- 会话模式部署
- 单作业模式部署
- 应用模式部署
- YARN 运行模式
- 会话模式部署
- 单作业模式部署
- 应用模式部署
- K8S运行模式
Standalone 运行模式
独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理,所以独立模式一般只用在开发测试或作业非常少的场景下
会话模式部署
提前启动集群,并通过web页面客户端提交任务(可以多个任务,但是集群资源固定)
单作业模式部署
Flink
的 Standalone
集群并不支持单作业模式部署,因为单作业模式需要借助一些资源管理平台
应用模式部署
应用模式下不会提前创建集群,所以不能调用start-cluster.sh
脚本,我们可以使用同样在bin目录下的standalone-job.sh
来创建一个JobManager
具体步骤如下:
监控端口
将应用程序的jar包放到lib
目录下
脚本会到lib
目录扫描所有的jar
包
执行以下命令,启动JobManager
mv FlinkTutorial-1.17-1.0-SNAPSHOT.jar lib/
bin/standalone-job.sh start --job-classname SocketStreamWordCount
启动TaskManager
bin/taskmanager.sh start
端口输入数据
webui查看
如果希望停掉集群,同样可以使用脚本,命令如下
bin/taskmanager.sh stop
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服务。
具体配置步骤如下:
- 配置环境变量,增加环境变量配置如下:
vim /etc/profileHADOOP_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`
-
使环境生效
source /etc/profile -
启动Hadoop集群,包括HDFS和YARN。
start-all.sh
会话模式部署
YARN的会话模式与独立集群略有不同,需要首先申请一个YARN会话(YARN Session)来启动Flink集群。具体步骤如下:
1)启动集群
(1)启动Hadoop集群(HDFS、YARN)。
(2)执行脚本命令向YARN集群申请资源,开启一个YARN会话,启动Flink集群。
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
通过命令行提交
flink run -m slave1:8081 -c SocketStreamWordCount ../lib/FlinkTutorial-1.17-1.0-SNAPSHOT.jar
如何关闭会话?
方式一:
开启会话前
开启会话后:
点到任务里面去,点击Kill Application
即可关闭
关闭会话后:
方式二:
重新开启会话
bin/yarn-session.sh -nm session2 -d
最下面有提示如何关闭
输入该命令关闭即可
echo "stop" | ./bin/yarn-session.sh -id application_1756024822319_0007
关闭成功
单作业模式部署
提交作业时才启动Flink集群
在YARN环境中,由于有了外部平台做资源调度,所以我们也可以直接向YARN提交一个单独的作业,从而启动一个Flink集群
执行命令提交作业
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
配置文件中设置
vim flink-conf.yaml
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集群也会停掉。
应用模式部署
命令行提交
bin/flink run-application -t yarn-application -c SocketStreamWordCount lib/FlinkTutorial-1.17-1.0-SNAPSHOT.jar
在命令行中查看或取消作业。
bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>
上传HDFS提交
可以通过yarn.provided.lib.dirs配置选项指定位置,将flink的依赖上传到远程。
(1)上传flink的lib和plugins到HDFS上
hadoop fs -mkdir /flink-dist
hadoop fs -put lib/ /flink-dist
hadoop fs -put plugins/ /flink-dist
(2)上传自己的jar包到HDFS
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是类似的