通過FileSystem.get(conf)初始化的時候,要通過靜態加載來實現,其加載類的方法代碼如下:
private static FileSystem createFileSystem(URI uri, Configuration conf ) throws IOException { Class<?> clazz = conf.getClass("fs." + uri.getScheme() + ".impl", null); if (clazz == null) { throw new IOException("No FileSystem for scheme: " + uri.getScheme()); } FileSystem fs = (FileSystem)ReflectionUtils.newInstance(clazz, conf); fs.initialize(uri, conf); return fs; }
onf.getClass需要讀取hadoop-common-x.jar下面的core-default.xml,但是這個xml里面沒有fs.hdfs.impl的配置信息,所以需要將這個類給配置上去。
將hadoop-commom-x.jar里面的core-default.xml文件取出並修改,添加如下代碼:
<property>
<name>fs.hdfs.impl</name>
<value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
<description>The FileSystem for hdfs: uris.</description>
</property>
或者應用代碼使用時候,自行添加:
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");