Hadoop 之 No FileSystem for scheme: hdfs

速记:

1. 场景&报错:

Java 代码开发,访问HDFS并写数据,执行可执行jar包报错如下(执行命令:java -jar xxx.jar):

18/03/15 09:39:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.io.IOException: No FileSystem for scheme: hdfs
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2676)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2690)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2733)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2715)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:382)
    at com.xcar.etl.ApendToHdfs.apend(ApendToHdfs.java:50)
    at com.xcar.etl.ApendToHdfs.main(ApendToHdfs.java:154)

2. 解决

conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

详细解释请看参考文献[1]。

虽然异常是不报了,但是仍然有警告如下:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解决办法: 将 java -jar XXX.jar 改为 hadoop jar xxx.jar 命令执行。

因为我们知道执行Hadoop命令时是会自动加载Hadoop相关jar包及配置的,但确保环境变量已配置生效,参见文献[2][3]。

这样,通过Hadoop命令去执行,即使不设置fs.hdfs.impl参数也不会报No FileSystem for scheme异常了。

参考文献

1. java.io.IOException: No FileSystem for scheme: hdfs
2. Hadoop之Unable to load native-hadoop library问题解决
3. Hadoop出现错误:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable,解决方案

你可能感兴趣的:(Hadoop 之 No FileSystem for scheme: hdfs)