MapReduce सॉर्ट एल्गोरिथ्म कैसे काम करता है?


110

मुख्य उदाहरणों में से एक है जो MapReduce की शक्ति का प्रदर्शन करने में उपयोग किया जाता है, वह है टेरासॉर्ट बेंचमार्क । मुझे MapReduce वातावरण में उपयोग किए जाने वाले सॉर्टिंग एल्गोरिदम की मूल बातें समझने में परेशानी हो रही है।

मुझे छाँटने के लिए बस अन्य सभी तत्वों के संबंध में एक तत्व की सापेक्ष स्थिति का निर्धारण करना शामिल है। इसलिए छंटाई में "सब कुछ" की तुलना "सब कुछ" से करना शामिल है। आपका औसत छँटाई एल्गोरिथ्म (त्वरित, बुलबुला, ...) बस यह एक स्मार्ट तरीके से करता है।

मेरे दिमाग में कई टुकड़ों में डेटासेट को विभाजित करने का मतलब है कि आप एक टुकड़े को सॉर्ट कर सकते हैं और फिर आपको अभी भी इन टुकड़ों को 'पूर्ण' पूरी तरह से छंटे हुए डेटासेट में एकीकृत करना होगा। हजारों प्रणालियों पर वितरित टेराबाइट डेटासेट को देखते हुए मुझे उम्मीद है कि यह एक बहुत बड़ा काम होगा।

तो यह वास्तव में कैसे किया जाता है? यह MapReduce छँटाई एल्गोरिथ्म कैसे काम करता है?

मुझे समझने में मदद करने के लिए धन्यवाद।

जवाबों:


61

यहाँ Tadoort के लिए Hadoop के कार्यान्वयन पर कुछ विवरण दिए गए हैं :

TeraSort एक मानक मैप / कम प्रकार है, सिवाय एक कस्टम पार्टीशनर के जो N - 1 सैंपल की हुई सूची की क्रमबद्ध सूची का उपयोग करता है जो कि प्रत्येक कम के लिए मुख्य सीमा को परिभाषित करता है। विशेष रूप से, सभी कुंजी जैसे कि नमूना [i - 1] <= कुंजी <नमूना [i] को कम करने के लिए भेजा जाता है। यह गारंटी देता है कि मुझे कम करने का आउटपुट i + 1 के आउटपुट से कम है। "

तो उनकी चाल उस तरह से है जैसे वे नक्शे के चरण के दौरान चाबियों का निर्धारण करते हैं। अनिवार्य रूप से वे यह सुनिश्चित करते हैं कि एक ही रिड्यूसर के प्रत्येक मूल्य को अन्य सभी रिड्यूसर के खिलाफ 'पूर्व-क्रमबद्ध' होने की गारंटी है।

मुझे जेम्स हैमिल्टन के ब्लॉग पोस्ट के माध्यम से पेपर संदर्भ मिला ।


3

Google संदर्भ: MapReduce: सरलीकृत डेटा प्रसंस्करण बड़े समूहों पर

में दिखाई दिया :
OSDI'04: ऑपरेटिंग सिस्टम डिज़ाइन और कार्यान्वयन पर छठा संगोष्ठी,
सैन फ्रांसिस्को, CA, दिसंबर, 2004।

उस लिंक में PDF और HTML-Slide संदर्भ है।

कार्यान्वयन संदर्भों के विवरण के साथ एक विकिपीडिया पृष्ठ भी है ।

आलोचना भी,

डेविड डेविट और माइकल स्टोनब्रोकर, समानांतर डेटाबेस में विशेषज्ञों का नेतृत्व कर रहे हैं और कुछ भी नहीं आर्किटेक्चर साझा करते हैं, उन समस्याओं की चौड़ाई के बारे में कुछ विवादास्पद दावे किए गए हैं जिनके लिए MapReduce का उपयोग किया जा सकता है। उन्होंने इसके इंटरफेस को बहुत निम्न-स्तर कहा, और सवाल किया कि क्या यह वास्तव में प्रतिमान का प्रतिनिधित्व करता है कि इसके प्रस्तावकों ने दावा किया है कि यह है। वे टेपेडाटा को दो दशकों से अधिक समय से पहले की कला के उदाहरण के रूप में उद्धृत करते हुए, मैप्रेड्यूस के प्रस्तावकों के नवीनता के दावों को चुनौती देते हैं; उन्होंने MapReduce प्रोग्रामर की तुलना Codasyl प्रोग्रामर से की, दोनों ने ध्यान दिया कि "निम्न-स्तरीय भाषा में निम्न-स्तरीय रिकॉर्ड हेरफेर प्रदर्शन कर रहे हैं"। MapReduce के इनपुट फ़ाइलों का उपयोग और स्कीमा समर्थन की कमी, सामान्य डेटाबेस सिस्टम विशेषताओं जैसे B- पेड़ और हैश विभाजन द्वारा सक्षम प्रदर्शन में सुधार को रोकता है,


मैं समझता हूँ (अधिकांश) MapReduce की अवधारणाओं का उल्लेख दस्तावेजों में वर्णित है। मैं छँटाई एल्गोरिथ्म को समझने की कोशिश कर रहा हूँ।
नील्स बसजेस

1

Google के MapReduce के पेपर को पढ़ते समय मेरा भी यही सवाल था। @ युवल एफ का जवाब मेरी पहेली को बहुत हल करता है।

पेपर पढ़ते समय एक बात मुझे ध्यान में आई कि पार्टीशन (कम होने से पहले मैप के बाद) में जादू होता है।

पेपर hash(key) mod Rविभाजन के उदाहरण के रूप में उपयोग करता है , लेकिन यह अलग-अलग कार्यों को कम करने के लिए मध्यवर्ती डेटा को विभाजित करने का एकमात्र तरीका नहीं है।

इसे पूरा करने के लिए बस @Yuval एफ के जवाब में सीमा की स्थिति जोड़ें : मान लीजिए कि मिन (एस) और अधिकतम (एस) सैंपल की गई कुंजियों के बीच न्यूनतम कुंजी और अधिकतम कुंजी है; सभी कुंजियाँ <min (S) एक कम कार्य के लिए विभाजित हैं; इसके विपरीत, सभी चाबियाँ> = अधिकतम (एस) एक कम कार्य के लिए विभाजित हैं।

न्यूनतम कुंजियों पर कोई कठिन सीमा नहीं है, जैसे कि न्यूनतम या अधिकतम। बस, अधिक समान रूप से इन आर कुंजियों को सभी कुंजियों के बीच वितरित किया जाता है, अधिक "समानांतर" यह वितरित प्रणाली है और कम संभावना है कि एक कम ऑपरेटर में मेमोरी फ़्लोफ़्लो समस्या है।


0

सिर्फ अनुमान...

डेटा के एक विशाल सेट को देखते हुए, आप समानांतर में संसाधित किए जाने वाले डेटा को कुछ हिस्सों में विभाजित करेंगे (शायद रिकॉर्ड संख्या अर्थात रिकॉर्ड 1 - 1000 = विभाजन 1, और इसी तरह)।

प्रत्येक विभाजन को क्लस्टर में किसी विशेष नोड में असाइन / शेड्यूल करें।

प्रत्येक क्लस्टर नोड अपने स्वयं के मिनी विभाजन में विभाजन (मानचित्र) को और अधिक तोड़ देगा, शायद कुंजी वर्णानुक्रम द्वारा। इसलिए, विभाजन 1 में, मुझे उन सभी चीजों को प्राप्त करें जो ए से शुरू होती हैं और इसे एक्स के मिनी विभाजन ए में आउटपुट करती हैं। यदि कोई A (x) पहले से है तो एक नया A (x) बनाएँ। अनुक्रमिक संख्या के साथ x बदलें (शायद ऐसा करने का शेड्यूलर काम है)। यानी मुझे अगली A (x) अद्वितीय आईडी दें।

मैपर (पिछले चरण) द्वारा पूरा किए गए कार्य (शेड्यूल) जॉब्स को "नोड" को कम करें। नोड क्लस्टर को कम करें तब प्रत्येक ए (एक्स) भागों को छाँटेंगे जो कि अकेलापन तब होता है जब अल लेफ्टर मैपर कार्य किए जाते हैं (वास्तव में w / A शुरू होने वाले सभी शब्दों को सॉर्ट करना शुरू नहीं कर सकते हैं जब अभी भी संभावना है कि अभी भी हैं एक और बनाने के लिए एक मिनी विभाजन होने जा रहा है)। अंतिम सॉर्ट किए गए विभाजन (यानी सॉर्टेड-ए, सॉर्टेड-बी, आदि) में परिणाम का उत्पादन करें।

एक बार हो जाने के बाद, छंटे हुए विभाजन को एक एकल डेटासेट में फिर से संयोजित करें। इस बिंदु पर यह सिर्फ n फ़ाइलों का एक सरल संयोजन है (यदि n 26 हो सकता है यदि आप केवल ए - जेड) कर रहे हैं, आदि।

बीच में मध्यवर्ती चरण हो सकते हैं ... मुझे यकीन नहीं है :)। यानी आगे कम कदम के बाद आगे का नक्शा और कम करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.