2012-06-20 10 views
8

मेरे पास दो अलग-अलग मैप्रिडस नौकरियों के लिए दो अलग जावा कक्षाएं हैं। मैं उन्हें स्वतंत्र रूप से चला सकता हूं। इनपुट फाइलें जिन पर वे काम कर रहे हैं वे दोनों नौकरियों के लिए समान हैं। तो मेरे सवाल है कि क्या यह की तरहहडोप मैपराइडस: एक हैडोप जॉब क्लास में दो मैपर और रेड्यूसर को परिभाषित करना संभव है?

mapper1.class 
mapper2.class 
reducer1.class 
reducer2.class 

और एक जावा वर्ग में दो मानचित्रकारों और दो reducers परिभाषित करना संभव है है तो

job.setMapperClass(mapper1.class); 
job.setmapperClass(mapper2.class); 
job.setCombinerClass(reducer1); 
job.setCombinerClass(reducer2); 
job.setReducerClass(reducer1); 
job.setReducerClass(reducer2); 

की तरह इन सेट के तरीके वास्तव में पिछले अभियानों को ओवरराइड या नया जोड़ सकता हूँ लोगों को? मैंने कोड की कोशिश की, लेकिन यह केवल नवीनतम दिए गए वर्गों को निष्पादित करता है जो मुझे सोचता है कि यह ओवरराइड करता है। लेकिन यह सही करने का एक तरीका होना चाहिए?

कारण मैं यह क्यों पूछ रहा हूं कि मैं इनपुट फ़ाइलों को केवल एक बार (एक I/O) पढ़ सकता हूं और फिर दो मानचित्रों को नौकरियों को कम कर सकता हूं। मैं यह भी जानना चाहता हूं कि मैं आउटपुट फ़ाइलों को दो अलग-अलग फ़ोल्डरों में कैसे लिख सकता हूं। फिलहाल, दोनों नौकरियां अलग हैं और इनपुट और आउटपुट निर्देशिका की आवश्यकता है।

उत्तर

1

आप इसके लिए एकाधिक इनपुट और एकाधिक आउटपुट कक्षाओं का उपयोग कर सकते हैं, लेकिन दोनों मैपर्स का आउटपुट दोनों reducers पर जाएगा। यदि दो मैपर/रेड्यूसर जोड़े के लिए डेटा बहता है तो वास्तव में एक-दूसरे से स्वतंत्र होते हैं और उन्हें दो अलग-अलग नौकरियों के रूप में रखें। वैसे, एकाधिक इनपुट आपके मैपर को बाहर परिवर्तन के साथ चलाएंगे, लेकिन रेड्यूसर को एकाधिकऑटपुट

+0

+1 यह समझ में आता है। – pyfunc

+0

@Chris एमआर की दोनों जोड़ी एक ही इनपुट साझा करती है, जिसने मुझे केवल एक बार इनपुट पढ़ने में सक्षम होने के बारे में सोचा। मैपर विभिन्न चाबियों के साथ काम करते हैं। इसका मतलब है कि एक मैपर के लिए चाबियाँ अन्य मैपर के लिए अलग-अलग होंगी। मैं सोच रहा हूं कि मैं एमआर के दो अलग-अलग जोड़े में प्रक्रिया करने के लिए केवल एक बार इनपुट फाइलें पढ़ सकता हूं जो अनिवार्य रूप से काम करते हैं। – Bob

0

का उपयोग करने के लिए संशोधित करना होगा, मेरी समझ के अनुसार, जो मैडो-हाइडोप स्ट्रीमिंग के साथ कम करने का उपयोग करने से आता है, आप कई चेन कर सकते हैं मैपर और रेड्यूसर जहां कोई अन्य

के आउटपुट का उपभोग करता है लेकिन आप अलग-अलग मैपर और रेड्यूसर को एक साथ चलाने में सक्षम नहीं होना चाहिए। मैपर्स स्वयं संसाधित होने वाले ब्लॉक पर निर्भर नहीं हैं। उस निर्णय के आधार पर मैपर को तुरंत चालू किया जाना चाहिए और नौकरी के लिए उपलब्ध मैपर की विविधता नहीं।

[संपादित करें: अपनी टिप्पणी के आधार पर]

मुझे नहीं लगता है कि संभव है। आप चेन (जहां रेड्यूसर को मैपर्स से सभी इनपुट प्राप्त होंगे। आप उन्हें अनुक्रमित कर सकते हैं लेकिन आप विशेष रूप से मैपर और रेड्यूसर के स्वतंत्र सेट नहीं चला सकते हैं।

मुझे लगता है कि आप क्या कर सकते हैं, भले ही आप दोनों इनपुट प्राप्त करते हों आपके दोनों reducers में मैपर्स, आप मैपर आउटपुट (के, वी) बना सकते हैं इस तरह से आप अपने reducers में अंतर कर सकते हैं कि किस मैपर (उत्पत्ति, के, वी) की उत्पत्ति थी। इस तरह दोनों reducers पर संसाधित कर सकते हैं चयनात्मक (कश्मीर, वी) जोड़े।

+0

@ बॉब: मैंने आपकी टिप्पणी – pyfunc

+0

कूल के आधार पर अपना उत्तर संपादित किया है, इसे एक संभावना के रूप में नहीं सोचा था। लेकिन मैं आउटपुट फाइलों को कैसे अलग कर सकता हूं, कहूं कि मैं इसे अपने रेड्यूसर कार्यान्वयन में संभाल सकता हूं, मुझे किसी भी तरह की आवश्यकता है, फिर निर्दिष्ट करें कि किन कुंजियां कहां लिखी गई हैं। – Bob

+0

कोई बॉब नहीं: आप ऐसा नहीं कर सकते। मैप 1 में आप क्या कर सकते हैं, map2 K, V के रूप में, (map1, V) सबमिट करता है ताकि reducer में आपको पता चले कि डेटा कहां से आ रहा है। प्रत्येक reducer नौकरी आउटपुट में अपनी फ़ाइल बनाता है ताकि आपका आउटपुट पहले से ही अलग हो। आपकी टिप्पणी के लिए – pyfunc

11

आप एक से अधिक मानचित्रकारों हो सकता है, लेकिन एक ही काम में, आप केवल एक कम करने पड़ सकता है। और जिन सुविधाओं की आवश्यकता MultipleInput, MultipleOutput और GenericWritable हैं।

MultipleInput का उपयोग करके, आप मैपर और संबंधित इनपुटफॉर्मेट सेट कर सकते हैं। इसका उपयोग करने के तरीके के बारे में मेरा post यहां है।

GenericWritable का उपयोग करके, आप reducer में विभिन्न इनपुट कक्षाओं को अलग कर सकते हैं। इसका उपयोग करने के तरीके के बारे में मेरा post यहां है।

MultipleOutput का उपयोग करके, आप एक ही reducer में विभिन्न कक्षाओं को आउटपुट कर सकते हैं।

+0

Thx! मैं उन्हें कोशिश करूँगा। – Bob

0

ChainMapper कक्षा एकल मानचित्र कार्य के भीतर एकाधिक मैपर कक्षाओं का उपयोग करने की अनुमति देती है। उदाहरण के लिए कृपया here देखें।

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