2012-11-27 10 views
9

Chcę odczytać plik z systemu plików Hadoop.ścieżka pliku w hdfs

Aby uzyskać prawidłową ścieżkę pliku, potrzebuję nazwy hosta i adresu portu hdfs.

więc w końcu moja ścieżka pliku będzie wyglądać następująco

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

Teraz chcę wiedzieć, aby wyodrębnić nazwy hosta = „123.23.12.4344” & portu: 9000?

Zasadniczo chcę uzyskać dostęp do FileSystem na Amazon EMR, ale kiedy używam

 FileSystem fs = FileSystem.get(getConf());
otrzymuję
 
You possibly called FileSystem.get(conf) when you should have called FileSystem.get(uri, conf) to obtain a file system supporting your path 
Postanowiłem więc użyć URI. (Muszę używać URI), ale nie jestem pewien, jak uzyskać dostęp do URI.

Odpowiedz

13

Możesz użyć jednego z dwóch sposobów, aby rozwiązać swój błąd.

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

Dzięki za to! Pomogło, możesz wyjaśnić, dlaczego tak jest? – ruralcoder

+4

Hadoop ma fabrykę FileSystem. Tworzy prawidłowy system plików oparty na schemacie URI i być może część URI dotycząca uprawnień. Możesz zobaczyć, czy chcesz otworzyć plik w pliku: //, s3: // lub hdfs: // potrzebujesz innego systemu plików dla każdego z nich. Dlatego należy podać identyfikator URI – Wheezil

+1

fs.default.name jest przestarzałe, każdy czytelnik tego pytania powinien zamiast tego użyć fs.defaultFS. – chomp