2012-11-27 43 views
9

Tôi muốn đọc tệp từ Hệ thống tệp Hadoop.đường dẫn tệp trong hdfs

Để đạt được đường dẫn chính xác của tệp, tôi cần tên máy chủ và địa chỉ cổng của hdfs.

nên cuối cùng con đường của tôi về tập tin sẽ giống như thế

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

Bây giờ tôi muốn biết để trích xuất các HostName = "123.23.12.4344" & cổng: 9000?

Về cơ bản, tôi muốn truy cập Hệ thống tệp trên Amazon EMR nhưng, khi tôi sử dụng

 FileSystem fs = FileSystem.get(getConf());
Tôi nhận được
 
You possibly called FileSystem.get(conf) when you should have called FileSystem.get(uri, conf) to obtain a file system supporting your path 
Vì vậy, tôi quyết định sử dụng URI. (Tôi phải sử dụng URI) nhưng tôi không chắc chắn cách truy cập URI.

Trả lời

13

Bạn có thể sử dụng một trong hai cách để giải quyết lỗi của mình.

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

Cảm ơn cho điều này! Nó đã giúp, bạn có thể giải thích tại sao điều này? – ruralcoder

+4

Hadoop có một nhà máy FileSystem. Nó tạo ra hệ thống tệp chính xác dựa trên lược đồ URI và có thể là phần thẩm quyền của URI. Bạn có thể xem liệu bạn có mở tệp trên tệp: //, s3: // hoặc hdfs: // bạn sẽ cần một hệ thống tệp khác cho mỗi tệp. Đó là lý do tại sao bạn cần bao gồm URI – Wheezil

+1

fs.default.name không được chấp nhận, mọi người đọc câu hỏi này nên sử dụng fs.defaultFS để thay thế. – chomp

Các vấn đề liên quan