2012-06-16 12 views
12

क्या हैडोप मैपरेडस में कई अलग-अलग मैपर्स के साथ कई इनपुट होना संभव है? प्रत्येक मैपर वर्ग इनपुट के एक अलग सेट पर काम करता है, लेकिन वे सभी एक ही reducer द्वारा खपत कुंजी मूल्य जोड़े उत्सर्जित करेंगे। ध्यान दें कि मैं यहाँ मैपर्स चेनिंग के बारे में बात नहीं कर रहा हूं, मैं समानांतर में अलग-अलग मैपर चलाने के बारे में बात कर रहा हूं, अनुक्रमिक रूप से नहीं।क्या हैडोप मैपरेडस में कई अलग-अलग मैपर्स के साथ कई इनपुट होना संभव है?

उत्तर

13

इसे शामिल करने के लिए कहा जाता है।

आप मानचित्र में मैपर और reducers का उपयोग करना चाहते हैं। * पैकेज (पुराना, लेकिन अभी भी समर्थित)। नए पैकेज (मैप्रिडस। *) केवल एक मैपर इनपुट की अनुमति देते हैं। mapred संकुल के साथ, आप में शामिल होने को परिभाषित करने के MultipleInputs वर्ग का उपयोग करें:

MultipleInputs.addInputPath(jobConf, 
        new Path(countsSource),  
        SequenceFileInputFormat.class, 
        CountMapper.class); 
MultipleInputs.addInputPath(jobConf, 
        new Path(dictionarySource), 
        SomeOtherInputFormat.class, 
        TranslateMapper.class); 

jobConf.setJarByClass(ReportJob.class); 
jobConf.setReducerClass(WriteTextReducer.class); 

jobConf.setMapOutputKeyClass(Text.class); 
jobConf.setMapOutputValueClass(WordInfo.class); 

jobConf.setOutputKeyClass(Text.class); 
jobConf.setOutputValueClass(Text.class); 
+5

नया एपिस ('मैप्रेडस 'नहीं' मैप्रेड ') में' एकाधिक इनपुट 'हैं: http://hadoop.apache.org/common/docs/r1.0.3/api/org/apache/hadoop/mapreduce/lib /input/MultipleInputs.html –

+0

@ डोनाल्ड खान: बिल्कुल सही। –

+0

@DonaldMiner कुछ संस्करण करते हैं, लेकिन ऐसा लगता है कि कम से कम 0.20.x नहीं है, उदा। यहां एकाधिक इनपुट की कमी ध्यान दें: http://hadoop.apache.org/docs/r0.20.205.0/api/org/apache/hadoop/mapreduce/lib/input/ – kabuko

2

मैं एक सवाल, 2 जवाब है, और एक विरोधी सिफारिश के साथ अपने प्रश्न का उत्तर होगा।

सवाल यह है कि: श्रृंखला में उन्हें चलाने के विरोध में, समानांतर में विषम नक्शा नौकरियों को चलाने में आप क्या लाभ देखते हैं, जो समान परिणामों को आउटपुट करते हैं जिन्हें उचित रूप से शफल किया जा सकता है? क्या पहचान पहचान मानचित्र के साथ दो बार एक ही रिकॉर्ड को पार करने से बचने का विचार है?

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

दूसरा जवाब एक कस्टम इनपुटफॉर्मैट बनाना है जो विषम इनपुट के दोनों स्वादों को पहचानने और बदलने में सक्षम है। यह बेहद बदसूरत है, लेकिन यह आपको पहले सुझाव के अनावश्यक पहचान मानचित्र से बचने की अनुमति देगा।

विरोधी सिफारिश क्रिस के उत्तर से बहिष्कृत हडोप एपीआई का उपयोग करें। हैडोप बहुत छोटा है, लेकिन एपीआई "नए" स्वाद के आसपास स्थिर हो रहे हैं। आप अंततः संस्करण लॉक-इन पर पहुंचेंगे।

+0

कई मैपर चलाने का कारण यह है कि आप कर सकते हैं FlumeJava पेपर में दिए गए एक फ्लैटन ऑपरेशन को लागू करें। विभिन्न मैपर से आउटपुट एक ही शफल ऑपरेशन में भाग ले सकता है। – tibbe

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