2012-07-31 11 views
6

मैं यहाँ हैडूप के लिए नया हूँ। यह स्पष्ट नहीं है कि हडूप मैप्रेडस का उपयोग करते समय हमें चाबियाँ कैसे क्रमबद्ध करने में सक्षम होना चाहिए? नक्शा चरण के बाद, हमें कुछ अनूठी कुंजी से संबंधित डेटा को कुछ reducers के लिए वितरित करने की आवश्यकता है। इसे सही तरीके से सॉर्ट करने की ज़रूरत के बिना किया जा सकता है?MapReduce चरण में सॉर्ट किया गया है और क्यों?

उत्तर

14

यह वहां है, क्योंकि सॉर्टिंग आपकी चाबियों को समूहबद्ध करने के लिए एक साफ चाल है। बेशक, अगर आपकी नौकरी या एल्गोरिदम को आपकी चाबियों के किसी भी क्रम की आवश्यकता नहीं है, तो आप कुछ हैशिंग चाल से समूह के लिए तेज़ी से होंगे।

हडोप में ही, वर्षों से पहले से ही एक जेआईआरए दायर किया गया है (source)। हडोप के शीर्ष पर परत के कई अन्य वितरण पहले से ही इन सुविधाओं में हैं, उदाहरण के लिए हनबोरक (वे इसे टालने से बचते हैं)। (source)

अपने वास्तविक सवाल करने के लिए

(क्यों), MapReduce स्वाभाविक गूगल (source) से एक कागज जो निम्नलिखित राज्यों था:

हम यह गारंटी है कि किसी भी विभाजन के भीतर, मध्यवर्ती कुंजी/मान जोड़ों को प्रमुख क्रम में बढ़ाने में संसाधित किया जाता है। यह आदेश देने की गारंटी आसान विभाजन प्रति एक हल कर आउटपुट फ़ाइल, जो उपयोगी होता है जब आउटपुट फ़ाइल स्वरूप कुंजी द्वारा कुशल यादृच्छिक पहुँच लुकअप समर्थन करने के लिए की जरूरत है, या उत्पादन की उपयोगकर्ताओं के लिए यह सुविधाजनक करने के लिए है लगता है उत्पन्न करने के लिए बनाता है डेटा क्रमबद्ध।

तो यह सॉर्ट का समर्थन करने के लिए एक अधिक सुविधाजनक निर्णय था, लेकिन स्वाभाविक रूप से केवल समूह कुंजी को सॉर्ट करने की अनुमति नहीं देता था।

+0

स्रोतों के संपादन के लिए धन्यवाद मैट। –

+0

धन्यवाद थॉमस! इससे स्पष्ट हुआ! – user428900

+0

मेरे विचार में, हैडॉप डिस्क में बिखरे हुए मानचित्र आउटपुट पर प्रारंभिक सॉर्टिंग शुरू करता है (रिकॉर्डिंग को रिक्त करने के लिए सॉर्टिंग केवल होता है) बाद में यह सॉर्ट (अपेक्षाकृत कम लागत) को मर्ज करता है, और शुरुआत से ही चाबियाँ क्रमबद्ध होती हैं संयोजन करने के लिए संयोजक और सॉर्ट किए गए चाबियाँ भी reducer का आह्वान करते समय मदद करता है इसलिए सॉर्टिंग एक अच्छा विचार है। – Kalai

1

"कुंजी द्वारा क्रमबद्ध" सबसे अच्छी तरह से समझा जाता है यदि हम इस तथ्य पर विचार करते हैं कि अलग-अलग मशीनों पर अलग-अलग कुंजी भेजकर आपके लिए हैडऑप डिस्ट्रिब्यूट्स प्रक्रिया करता है।

The reducer which a (k,v) pair is sent to = k.hashCode()%num_of_machines. 

तो, अगर मेरी कुंजी के hashCode 10 है, और मैं 2 मशीन है, कुंजी मशीन # 0, उदाहरण के लिए भेजा जाएगा: बुनियादी (सरलीकृत) विचार के संस्करण इस है।

इस प्रकार, कुंजी (पहले) हमें गणना वितरित करने का एक आसान तरीका प्रदान करती है।

गणना के वितरण को सरल बनाने के अलावा, कुंजी हमें अलग-अलग डेटा फ़ाइलों के रिकॉर्ड को एकल क्लस्टर में शामिल करने का एक तरीका देती है। उदाहरण के लिए, हम word_count जैसी चीजें कैसे कर सकते हैं।

वास्तव में, यदि आपको लगता है कि आपको चाबियाँ की आवश्यकता नहीं है --- तो आपको शायद हडूप की आवश्यकता नहीं है!

क्लासिक उदाहरण (शब्द गणना):

Hadoop "शब्द गणना" उदाहरण में, हम मानों वाली कुंजियों (एक कुंजी = एक शब्द) (# बार उस शब्द का एक खंड में देखा गया था फेंकना पाठ)। यह एक सिंगल को एक सिंगल शब्द प्राप्त करने के लिए फ़ंक्शन को कम करने की अनुमति देता है, और इस प्रकार एक सटीक शब्द गणना बनाने के लिए इसे देखा गया हर बार जोड़ता है।

इस प्रकार, चाबियों का एकत्रीकरण "मैप" चरण को कई मशीनों में स्वतंत्र रूप से वितरित करने की अनुमति देता है।एक ही reducer के लिए कुंजी को एकत्रित किए बिना, शब्द गणना उदाहरण में, हमें किसी दिए गए शब्द के लिए कई शब्द गणना मिल सकती हैं, क्योंकि कोई गारंटी नहीं है कि एक भी reducer सभी फ़ाइलों से सभी शब्द गणना प्राप्त होगा।

एक और उदाहरण:

अब ... की सुविधा देता है कहते हैं कि हम आईडी के रूप में सामाजिक सुरक्षा नंबर है और हम उत्पादन के लिए व्यक्तिगत डेटा के एकीकरण का चाहते हैं। आइए कहें कि हमारे पास 2 विशाल फाइलें हैं।

ssn-> नाम

ssn-> shoe_size

इस मामले में, हम प्रमुख समूह की शक्ति है, ऐसा है कि एक व्यक्तियों नाम और जूते का आकार दोनों एक ही कम कर कार्य करने के लिए भेजा जाता है का लाभ उठाने कर सकते हैं।

कम करने (2) 2 रिकॉर्ड यहां प्राप्त होगा:

ssn-> नाम, shoe_size

विचार यहाँ यह है कि जब नक्शा लेखन/नौकरियों को कम करने, आप अपने "tuples" सांकेतिक शब्दों में बदलना करने के लिए है कि इस तरह से आउटपुट किया जाता है कि वे कम चरण में, सार्थक तरीके से एक साथ जुड़ सकते हैं। किसी भी वितरित कंप्यूटिंग वातावरण की संभावना किसी बिंदु पर, विभिन्न नोड्स में गणना किए गए रिकॉर्ड को गठबंधन करने की आवश्यकता होगी। कुंजी हमें ऐसा करने के लिए एक सुविधाजनक और स्केलेबल पद्धति प्रदान करते हैं।

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

निष्कर्ष

इस तरह से, कुंजी द्वारा वितरण डेटा दर्दनाक जटिल मध्यस्थ डेटा भंडारण/कैशिंग किसी तरह से जुड़े तर्क की आवश्यकता होगी में शामिल होने के बिना। हडोप बस एक परिचित प्रतिमान: कुंजी और मूल्यों का उपयोग करके समानांतर गणनाओं से डेटा परिणामों में "शामिल" होने की सामान्य आवश्यकता को सामान्यीकृत और सारणीकृत करता है।

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