0


使用Flink命令行和Java API远程提交Flink任务到Yarn

目录

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>
            &

本文转载自: https://blog.csdn.net/yy8623977/article/details/129547070
版权归原作者 Bulut0907 所有, 如有侵权,请联系我们删除。

“使用Flink命令行和Java API远程提交Flink任务到Yarn”的评论:

还没有评论