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