2012-11-27 15 views
9

Voglio leggere il file dal file system Hadoop.percorso file in hdf

Per ottenere il percorso corretto del file, ho bisogno del nome host e dell'indirizzo di porta dello hdfs.

così alla fine il mio percorso del file sarà simile

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

Ora voglio sapere per estrarre il hostname = "123.23.12.4344" & porto: 9000?

Fondamentalmente, voglio accedere a FileSystem su Amazon EMR ma, quando uso

 FileSystem fs = FileSystem.get(getConf());
ottengo
 
You possibly called FileSystem.get(conf) when you should have called FileSystem.get(uri, conf) to obtain a file system supporting your path 
Quindi ho deciso di utilizzare l'URI. (Devo usare l'URI) ma non sono sicuro di come accedere all'URI.

risposta

13

È possibile utilizzare uno dei due modi per risolvere il proprio errore.

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

Grazie per questo! Ha aiutato, puoi spiegare perché questo è? – ruralcoder

+4

Hadoop ha una fabbrica FileSystem. Crea il file system corretto in base allo schema URI e forse la parte di autorità dell'URI. Puoi vedere se avresti aperto un file su file: //, s3: // o hdfs: // avresti bisogno di un diverso file system per ognuno. Ecco perché è necessario includere l'URI – Wheezil

+1

fs.default.name è deprecato, ogni lettore di questa domanda dovrebbe invece utilizzare fs.defaultFS. – chomp