आप बस अपनी नक्शाकार कार्यान्वयन से सीधे HDFS के उत्पादन में लिख सकते हैं - बस संदर्भ के विन्यास का उपयोग कर एक फाइल सिस्टम वस्तु बनाने और उसके बाद एक फ़ाइल बनाने के लिए, यह करने के लिए लिख सकते हैं और इसे बाहर बंद करने के लिए याद रखें:
public void cleanup(Context context) {
FileSystem fs = FileSystem.get(context.getConfiguration());
PrintStream ps = new PrintStream(fs.create(
new Path("/path/to/output", "map-output")));
ps.println("test");
ps.close();
}
अन्य विचारों के लिए चीजें - प्रत्येक फ़ाइल को एचडीएफएस में विशिष्ट रूप से नामित करने की आवश्यकता है, इसलिए आप मैपर आईडी नंबर के साथ फ़ाइल नाम प्रत्ययित कर सकते हैं, लेकिन आपको सट्टा निष्पादन की सराहना करने की भी आवश्यकता है (जिसमें आपका मैपर कार्य उदाहरण दो स्थानों पर चल रहा है - दोनों कोशिश कर रहे हैं एचडीएफएस में एक ही फाइल को लिखने के लिए)।
आप सामान्य रूप से इस से दूर हो जाते हैं क्योंकि आउटपुट कमिश्नर कार्य आईडी और प्रयास संख्या के साथ एक टीएमपी एचडीएफएस निर्देशिका में फ़ाइलों को बनाता है, केवल उस कार्य प्रयास के प्रतिबद्ध होने पर इसे सही स्थान और फ़ाइल नाम पर ले जाता है। मैप-साइड चलाते समय इस समस्या के आसपास कोई रास्ता नहीं है (डेटा को स्थानीय फाइल सिस्टम में लिखा जाता है) बिना सट्टा निष्पादन को बंद कर या एचडीएफएस में कई फाइलें बनाने के बिना, प्रत्येक प्रयास में से एक।
तो एक और अधिक 'पूर्ण' समाधान दिखाई देगा:
FileSystem fs = FileSystem.get(context.getConfiguration());
PrintStream ps = new PrintStream(fs.create(new Path(
"/path/to/output", String.format("map-output-%05d-%d",
context.getTaskAttemptID().getTaskID().getId(),
context.getTaskAttemptID().getId()))));
ps.println("test");
ps.close();
MultipleOutputs मदद मिलेगी आप पक्ष को कम है, लेकिन मुझे नहीं लगता मानचित्र साइड यह काम करेगा क्योंकि वहां कोई उत्पादन committer और काम निर्देशिका एचडीएफएस में नहीं है।
बेशक, यदि यह केवल एक नक्शा था, तो एकाधिक आउटपुट काम करेंगे। तो एक वैकल्पिक दृष्टिकोण नक्शा केवल नौकरी चलाने के लिए होगा, और उसके बाद माध्यमिक नौकरी (पहचान मैपर के साथ) में आउटपुट के वांछित हिस्से का उपयोग करें - इस बात पर निर्भर करता है कि आपके अनुमान में कितना डेटा है।
स्रोत
2012-10-07 16:49:16
उत्तर के लिए धन्यवाद! मैंने कोशिश की, यह काम करता है! –