为什么Hadoop FileSystem.get方法需要知道完整的URI而不仅仅是方案

时间:2012-10-31 06:46:48

标签: java hadoop

是否可以使用从任何有效hdfs url创建的Hadoop FileSystem实例再次用于读取和编写不同的hdfs url。我已尝试过以下

String url1 = "hdfs://localhost:54310/file1.txt";
String url2 = "hdfs://localhost:54310/file2.txt";
String url3 = "hdfs://localhost:54310/file3.txt";

//Creating filesystem using url1
FileSystem fileSystem = FileSystem.get(URI.create(url1), conf);

//Using same filesystem with url2 and url3  
InputStream in = fileSystem.open(new Path(url2));
OutputStream out = fileSystem.create(new Path(url3));

这样可行。但这会引起任何其他问题。

2 个答案:

答案 0 :(得分:7)

您当然可以使用您的计划和地址创建一个FileSystem,然后通过FileSystem获取。

Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://localhost:54310");
FileSystem fs = FileSystem.get(conf);
InputStream is = fs.open(new Path("/file1.txt"));

答案 1 :(得分:0)

对于不同的dfs路径,create / open方法将失败。查看org.apache.hadoop.fs.FileSystem#checkPath方法。