目录
一、引言
1.1 Yarn运行模式的部署过程和优势
Yarn运行模式是指由资源管理框架Yarn来启动Flink集群。
其部署过程是客户端会将Flink应用提交给Yarn的ResourceManager,而Flink会在由ResourceManager申请到的容器上部署相应的JobManager和TaskManager实例。
Yarn运行模式的一个最为明显的优势是会实现对TaskManager资源的一个动态分配。
1.2 本文目标
本文主要实现在Linux系统上将Flink任务部署到Yarn集群上。
1.3 软件版本说明
为避免相应版本之间的冲突,本文将所使用的相关软件版本汇总至如下表1所示情况。
软件名称 | 软件版本号 |
jdk | 1.8 |
hadoop | 3.1.3 |
flink | 1.17 |
同时, 由于Yarn运行模式是在搭建完Flink后部署的, 故在开始本文配置之前,读者首先确保Linux系统已经安装好Flink和Hadoop集群。若未安装Flink集群,可参考下文进行配置。
Flink实战——集群搭建https://blog.csdn.net/m0_46332441/article/details/137519959?spm=1001.2014.3001.5501
二、配置过程
2.1 配置环境变量
Yarn运行模式的部署仅需要对环境变量进行修改。首先,按照图1所示内容进入到环境变量所对应的配置位置,其中,红色框住部分为用户搭建hadoop集群时设定的目录位置。

进一步,在环境变量配置文件中,新增如下图2红色框住部分所示的内容,相应内容见下方:
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`

2.2 加载环境变量
完成上述2.1步骤后,保存退出文件,并采用如下的Linux命令,加载环境变量。其中,红色标注部分由读者自定义配置所决定。
[root@hadoop00 ~]$ source /etc/profile.d/my_env.sh
2.3 启动Hadoop集群
最后,若读者已经编写过Hadoop集群启动脚本,则采用脚本启动Hadoop集群;若读者未编写相应脚本可以采用如下的Linux命令启动Hadoop集群。
[root@hadoop00 hadoop-3.1.3]$ start-dfs.sh
[root@hadoop00 hadoop-3.1.3]$ start-yarn.sh
注意:无论是会话模式、单作业模式还是应用模式,在Yarn运行模式中,都要率先开启Hadoop集群才能使用,否则相应模式会报错。
三、三种部署模式下的相关操作介绍
3.1 会话模式
会话模式下的相关Linux操作命令见下方:
1. 开启Yarn会话命令(会话模式需要单独开启一个YARN会话)
[root@hadoop00 flink-1.17]$ bin/yarn-session.sh
2.命令行提交作业命令
[root@hadoop00 flink-1.17]$ bin/flink run -c com.Demo Demo.jar
其中,红色标注字体为用户根据实际情况所设定的类名和Jar包名。
3.2 单作业模式
单作业模式下的相关Linux命令操作见下方:
1.命令行提交作业
[root@hadoop00 flink-1.17]$ bin/flink run -d -t yarn-per-job -c com.Demo Demo.jar
其中,红色标注字体为用户根据实际情况所设定的类名和Jar包名。
2.命令行查看作业
[root@hadoop00 flink-1.17]$ bin/flink list -t yarn-per-job -Dyarn.application.id=XX
其中,红色标注字体为当前应用的ID。
3.命令行取消作业
[root@hadoop00 flink-1.17]$ bin/flink cancel -t yarn-per-job -Dyarn.application.id=XX YYY
其中,红色标注字体为当前应用的ID,棕色字体为<jobid>作业ID。
3.3 应用模式
应用模式下的相关Linux命令操作见下方:
1. 命令行提交作业
[root@hadoop00 flink-1.17]$ bin/flink run-application -t yarn-application -c com.Demo Demo.jar
其中,红色标注字体为用户根据实际情况所设定的类名和Jar包名。
2.命令行查看作业
[root@hadoop00 flink-1.17]$ bin/flink list -t yarn-application -Dyarn.application.id=XX
其中,红色标注字体为当前应用的ID。
3.命令行取消作业
[root@hadoop00 flink-1.17]$ bin/flink cancel -t yarn-application -Dyarn.application.id=XX YYY
其中,红色标注字体为当前应用的ID,棕色字体为<jobid>作业ID。
4.从hdfs中提交作业
[root@hadoop00 flink-1.17]$ bin/flink run-application -t yarn-application -Dyarn.provided.lib.dirs=''hdfs_lib_plugins_dir" -c com.Demo hdf_jar_dir
其中,红色标注字体hdfs_lib_plugins_dir、com.Demo和hdf_jar_dir分别表示lib和plugins在HDFS上的位置、用户根据实际情况所设定的类名和Jar包在HDFS上的位置。
四、配置报错及修复
4.1 启动出错
若在Yarn运行模式下启动三个模式中任一的一种模式时(会话模式、单作业模式、应用模式),出现Exception in thread "main" java.lang.NoClassDefFoundError错误标识,即出现如下图3所示错误。

其产生错误的原因是配置环境变量时,没有键入正确的反引号或者配置完成后没有重新加载环境变量。下图4展示错误的反引号情况。

4.2 提交作业时出错
若在会话模式下,上传作业时出现java.net.ConnectException:拒绝连接的错误标识,即下图5所示错误情况。

造成这种错误的原因是,在上传作业时,未开启一个YARN会话。此时,单独开启一个Yarn会话即可解决该错误。