2012-11-27 62 views
9

我想从Hadoop文件系统中读取文件。hdfs中的文件路径

为了实现文件的正确路径,我需要hdfs的主机名和端口地址。

所以最后我的文件的路径看起来像

Path path = new Path("hdfs://123.23.12.4344:9000/user/filename.txt") 

现在我想知道提取主机名=“123.23.12.4344” &端口:9000?

基本上,我想访问Amazon EMR上的FileSystem,但是当我使用

 FileSystem fs = FileSystem.get(getConf());
时,我得到了
 
You possibly called FileSystem.get(conf) when you should have called FileSystem.get(uri, conf) to obtain a file system supporting your path 
所以我决定使用URI。 (我必须使用URI),但我不确定如何访问URI。

回答

13

您可以使用以下两种方法之一来解决您的错误。

1.

String infile = "file.txt"; 
Path ofile = new Path(infile); 
FileSystem fs = ofile.getFileSystem(getConf()); 

2.

Configuration conf = getConf(); 
System.out.println("fs.default.name : - " + conf.get("fs.default.name")); 
// It prints uri as : hdfs://10.214.15.165:9000 or something 
String uri = conf.get("fs.default.name"); 
FileSystem fs = FileSystem.get(uri,getConf()); 
+0

感谢这个!它有帮助,你能解释为什么这是吗? – ruralcoder

+4

Hadoop有一个FileSystem工厂。它根据URI方案创建正确的文件系统,也可能是URI的权威部分。你可以看看你是否打开文件://,s3://或hdfs://你需要为每个文件系统创建一个不同的文件系统。这就是为什么你需要包含URI – Wheezil

+1

fs.default.name已被弃用,每个这个问题的读者应该使用fs.defaultFS来代替。 – chomp