FileSystem fs = FiileSystem.get(new URI("hdfs://hadoop1:9000"),new Configuration() );

以这种方式可以创建fs对象,但缺点时,使用了空白的Configuration对象,实际上只授予了fs.default.name这个属性,当访问的HDFS使用了HA(需要多个参数配合,同时指定),或者需要指定其它设置的时候,就会有问题


Configuration conf = new Configuration();

conf.addResource(new Path("conf/core-site.xml"));

conf.addResource(new Path("conf/hdfs-site.xml"));

FileSystem fs = FiileSystem.get(conf);

以这种方式创建出来的FS具有更大灵活性,以及更加方便。因为它直接读取了xml中的设置,如果有必要,也可以调用conf.set方法了设置单个属性。


另外,addResource有几种形式,一种形式是:addResource(String fileName),传入参数是文件名。这种形式强烈依赖于CLASS_PATH,程序只会在CLASS_PATH中寻找文件名,如果在文件名中写入路径是无效的。

addResource的另一种形式是addResource(Path file),这种方式不依赖于CLASS_PATH,可以在new Path的时候指定路径,不管是在程序开发中的调试,还是部署时参数文件相对固定的情况都会更有用