java.io.IOException: No FileSystem for scheme: hdfs

maven工程,执行jar包的时候出错:

Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs
但是,在没有打成jar包的工程中,是可以正常运行的,通过长时间的观察和分析,
发现与hadoop filesystem相关的包有两个,分别是:hadoop-hdfs-2.7.1.jar和hadoop-common-2.7.1.jar.

这两个包的services目录下都有,org.apache.hadoop.fs.FileSystem这个文件。使用Maven-assembly-plugin的时候,
会将所有依赖的包unpack,然后在pack,这样就会出现,同样的文件被覆盖的情况。

maven-assembly-plugin(fatjar也是一样的),将hadoop-common.jar中的services内容打进了最终的jar包中,
而hadoop-hdfs.jar包中,services的内容被覆盖了。由于我们的函数调用是这样写的:

在函数中使用了hdfs://IP : port的schema,而在生成的最终jar包中,无法找到这个schema的实现。所以就抛出了


java.io.IOException: No FileSystem for scheme: hdfs


解决方案是,在设置hadoop的配置的时候,显示设置这个类:"org.apache.hadoop.hdfs.DistributedFileSystem:


val conf = new Configuration() //hadoop配置,hadoop-default.xml,hadoop-site.xml的<name>.</name><value>.</value>
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem")









posted @ 2019-10-28 14:39  糖醋排骨加辣椒  阅读(1603)  评论(0编辑  收藏  举报