2012-11-27 16 views
9

में फ़ाइल पथ मैं हैडोप फ़ाइल सिस्टम से फ़ाइल को पढ़ना चाहता हूं।एचडीएफएस

फ़ाइल के सही पथ को प्राप्त करने के लिए, मुझे hdfs का होस्ट नाम और पोर्ट पता चाहिए।

तो अंत में फ़ाइल की मेरी पथ

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

अब मैं चाहता हूँ कुछ इस तरह दिखाई होस्टनाम = "123.23.12.4344" & बंदरगाह को निकालने के लिए पता करने के लिए होगा: 9000?

असल में, मैं अमेज़ॅन ईएमआर पर फाइलसिस्टम का उपयोग करना चाहता हूं, लेकिन जब मैं

 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 
मिलता है इसलिए मैंने यूआरआई का उपयोग करने का निर्णय लिया। (मुझे यूआरआई का उपयोग करना है) लेकिन मुझे यकीन नहीं है कि यूआरआई कैसे पहुंचे।

उत्तर

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

हैडोप में एक फाइलसिस्टम फैक्ट्री है। यह यूआरआई योजना के आधार पर सही फाइल सिस्टम बनाता है, और शायद यूआरआई का प्राधिकरण हिस्सा। आप देख सकते हैं कि क्या आप फ़ाइल पर फ़ाइल खोलना चाहते हैं: //, s3: // या hdfs: // आपको प्रत्येक के लिए एक अलग फ़ाइल सिस्टम की आवश्यकता होगी। यही कारण है कि आप यूआरआई – Wheezil

+1

fs.default.name शामिल करने के लिए हटा दिया गया है, इस सवाल के हर पाठक fs.defaultFS बजाय का उपयोग करना चाहिए की जरूरत है। – chomp

संबंधित मुद्दे