当引入Hadoop-common-2.2.0.jar包进行二次开发,比如读写HDFS文件时,初次运行报错。
java.io.IOException: No FileSystem for scheme: hdfs at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367) at FileCopyToHdfs.readFromHdfs(FileCopyToHdfs.java:65) at FileCopyToHdfs.main(FileCopyToHdfs.java:26)
这是因为该包下默认的core-default.xml没有配置如下属性:
<property> <name>fs.hdfs.impl</name> <value>org.apache.hadoop.hdfs.DistributedFileSystem</value> <description>The FileSystem for hdfs: uris.</description> </property>
上属性指定fs.hdfs.impl的实现类。
添加完后,问题解决。
建议下载hadoop-2.2.0源码,在源码修改core-default.xml文件后再编译打包,再在二次开发的工程引入新的jar包。
参考:http://www.linuxidc.com/Linux/2014-01/95943.htm