使用Flink命令行和Java API远程提交Flink任务到Yarn
目录
- 1. 背景
- 2. 命令行远程提交
-
- 2.1 环境部署
-
- 2.1.1 配置hosts文件
- 2.1.2 部署Flink
- 2.1.3 部署Hadoop
- 2.3 代码提交
- 3. 代码远程提交
-
- 3.1 环境部署
-
- 3.1.1 配置hosts文件
- 3.1.2 部署Flink
- 3.1.3 下载java运行所需jar包
- 3.2 程序编写
-
- 3.2.1 resources资源准备
- 3.2.2 pom.xml
- 3.2.3 远程提交Flink任务到Yarn
- 3.2.4 远程stop Yarn上的Flink任务
- 3.3 代码提交
1. 背景
因公司要做数据平台,需要使用Java API远程提交Flink任务到Yarn集群
尝试在IDEA中直接提交Flink任务到Yarn集群一直报异常:Could not find or load main class org.apache.flink.yarn.entrypoint.YarnApplicationClusterEntryPoint
,原因是缺少Hadoop的Classpath,但是在yarn-site中配置了参数yarn.application.classpath
,和添加了Hadoop的所有依赖jar包后依然报错
而且Seatunnel和Streampark这种开源项目,也都是通过Flink_HOME来提交Flink任务的,所有本文也是采用这种方式
2. 命令行远程提交
2.1 环境部署
需要先安装Java,并配置Java环境变量
2.1.1 配置hosts文件
将Yarn集群的服务器hostname和IP映射,添加到/etc/hosts文件中
2.1.2 部署Flink
下载开源的Flink 1.15.0二进制包,然后进行解压
2.1.3 部署Hadoop
下载开源的Hadoop 2.8.5二进制包,然后进行解压
然后将Hadoop集群的core-site.xml、hdfs-site.xml、yarn-site.xml拷贝过来,进行覆盖
在/root/.bash_profile中配置HADOOP_CLASSPATH,如下所示:
export HADOOP_CLASSPATH=`/root/hadoop-2.8.5/hadoop-2.8.5/bin/hadoop classpath`
2.3 代码提交
[root@bigdata flink-remote-submit]#
[root@bigdata flink-remote-submit]# mkdir data-sync-test
[root@bigdata flink-remote-submit]#
[root@bigdata flink-remote-submit]# cd data-sync-test/
[root@bigdata data-sync-test]#
然后上传datasync-test的jar包到创建的目录下
然后使用flink命令行提交任务
[root@bigdata data-sync-test]#
[root@bigdata data-sync-test]# /root/flink-1.15.0/flink-1.15.0/bin/flink run -m yarn-cluster -ynm flink_remote_submit_test -c com.gildata.datasync.datasync_test.flink_submit.FlinkTestJob /root/data-sync-test/datasync-test-1.0-SNAPSHOT.jar
[root@bigdata data-sync-test]#
3. 代码远程提交
3.1 环境部署
需要先安装Java,并配置Java环境变量
3.1.1 配置hosts文件
将Yarn集群的服务器hostname和IP映射,添加到/etc/hosts文件中
3.1.2 部署Flink
部署Flink conf目录
下载开源的Flink 1.15.0二进制包,然后进行解压。将FLINK_HOME/conf目录下的所有配置文件,放到/opt/flink-remote-submit/flink-1.15.0-conf目录下。再修改flink-conf.yaml中的state.savepoints.dir参数和Flink集群一样
上传开源的Flink lib中jar包到HDFS
然后将FLINK_HOME/lib目录下的所有jar包,上传到HDFS的/flink/remote-submit-lib下
然后下载flink-runtime-web-1.15.0.jar、flink-connector-jdbc-1.15.0.jar、mysql-connector-java-8.0.29.jar,上传到HDFS的/flink/remote-submit-lib下
3.1.3 下载java运行所需jar包
下载flink-clients-1.15.0.jar、log4j-1.2-api-2.17.2.jar,到/opt/flink-remote-submit/java-lib目录下
3.2 程序编写
3.2.1 resources资源准备
将Yarn集群的core-site.xml、hdfs-site.xml、yarn-site.xml放到项目的src/main/resources目录下
3.2.2 pom.xml
<!-- 用于flink提交任务获取StreamExecutionEnvironment -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>1.15.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-yarn</artifactId>
<version>1.15.0</version>
<scope>compile</scope>
</dependency>
<!-- 用于代码提交flink程序 -->
<dependency>
&