Flink1.13集成Hadoop3.x的解决方法

问题描述

Flink1.13.6 如何集成Hadoop-3.3.0

通常Flink集群配置好后,还不能直接访问HDFS,因为缺少相关jar包,会弹出无法解析hdfs类型的schema的错误:

org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no Hadoop file system to support this scheme could be loaded.

版本说明

我的flink是1.13.6版本,hadoop是3.3.0版本

虽然官方声明flink目前尚没有对hadoop 3.x的支持,但只要没用到hadoop 3.x的新特性,只用hadoop 2.x就有的常规功能的话,现有的jar包是可以支持的。

解决方法

网上找到的诸如添加HADOOP_CLASSPATH方法对我的flink集群无效,后来花了一番功夫,尝试了其他方法,终于解决了。

此时只需要往服务器上的 flink 中的lib目录里添加2个jar包即可.

commons-cli-1.4.jar
flink-shaded-hadoop-3-uber-3.1.1.7.2.9.0-173-9.0.jar

设置环境变量 HADOOP_CLASSPATH

export HADOOP_CLASSPATH=`hadoop classpath`

重启Flink集群

bin/stop-cluster.sh
bin/start-cluster.sh

补充问题1

上面测试使用的是官方写好的jar包,如果使用的是自己编写代码后打包的jar包,放到flink集群上运行时会出现诸如:

Wrong FS: hdfs://node1:8020/xxx, expected: hdfs://node1:8020

的问题,说明没给代码配置好正确的hdfs路径,只需要把hadoop中的这两个配置文件粘贴到工程的 `src/main/resources` 目录里即可:

core-site.xml
hdfs-site.xml
重新打包jar包。

补充问题2

还可能出现下面的错误:

Cannot instantiate file system for URI: hdfs

则检查自己的工程里`pom.xml`文件中有没有添加`hadoop-client`的依赖:

<dependency>
   <groupId>org.apache.hadoop</groupId>
   <artifactId>hadoop-client</artifactId>
   <version>3.3.0</version>
</dependency>

重新打包jar包,再重启服务器的flink集群(重启集群看起来没必要,但玄学的是这个问题我重启了才能成功解决)。

flink run方式执行jar包

bin/flink run ~/jars/my_flink_app.jar [args1] [args2] ... 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值