मैप रिड्यूस प्रोग्रामिंग में कम चरण में इसके उप-भागों के रूप में फेरबदल, छंटाई और कम करना है। छंटनी एक महंगा मामला है।
Map Reduce Programming में reducer में फेरबदल और छँटाई के उद्देश्य क्या है?
मैप रिड्यूस प्रोग्रामिंग में कम चरण में इसके उप-भागों के रूप में फेरबदल, छंटाई और कम करना है। छंटनी एक महंगा मामला है।
Map Reduce Programming में reducer में फेरबदल और छँटाई के उद्देश्य क्या है?
जवाबों:
सबसे पहले shuffling
मैपर से रिड्यूसर में डेटा ट्रांसफर करने की प्रक्रिया है, इसलिए मुझे लगता है कि यह स्पष्ट है कि रिड्यूसर के लिए यह आवश्यक है, अन्यथा, वे किसी भी इनपुट (या हर मैपर से इनपुट) नहीं कर पाएंगे । कुछ समय बचाने के लिए, नक्शा चरण समाप्त होने से पहले भी फेरबदल शुरू हो सकता है। इसीलिए जब आप मानचित्र की स्थिति अभी भी 100% नहीं है, तो आप 0% (लेकिन 33% से कम) से कम स्थिति देख सकते हैं।
Sorting
रेड्यूसर के लिए समय बचाता है, आसानी से अंतर करने में मदद करता है जब एक नया कम कार्य शुरू होना चाहिए। यह बस एक नया कम कार्य शुरू करता है, जब सॉर्ट किए गए इनपुट डेटा में अगली कुंजी बस इसे डालने के लिए पिछले की तुलना में अलग है। प्रत्येक कम कार्य कुंजी-मूल्य जोड़े की एक सूची लेता है, लेकिन इसे कम () विधि को कॉल करना पड़ता है जो एक कुंजी-सूची (मान) इनपुट लेता है, इसलिए इसे कुंजी द्वारा समूह मान देना होता है। ऐसा करना आसान है, यदि इनपुट डेटा मानचित्र चरण में पूर्व-क्रमबद्ध (स्थानीय रूप से) है और बस कम चरण में विलय हो जाता है (चूंकि reducers कई मैपर्स से डेटा प्राप्त करते हैं)।
Partitioning
, कि आपने एक उत्तर में उल्लेख किया है, एक अलग प्रक्रिया है। यह निर्धारित करता है कि नक्शा चरण के आउटपुट (कुंजी, मूल्य) जोड़ी, आउटपुट भेजा जाएगा। डिफ़ॉल्ट पार्टीशनर उन्हें कम किए गए कार्यों को वितरित करने के लिए कुंजियों पर एक हैशिंग का उपयोग करता है, लेकिन आप इसे ओवरराइड कर सकते हैं और अपने स्वयं के कस्टम विभाजनकर्ता का उपयोग कर सकते हैं।
इन चरणों की जानकारी का एक बड़ा स्रोत याहू ट्यूटोरियल है ।
इसका एक अच्छा चित्रमय प्रतिनिधित्व निम्नलिखित है (फेरबदल को इस आंकड़े में "प्रतिलिपि" कहा जाता है):
ध्यान दें कि shuffling
और sorting
सब पर प्रदर्शन नहीं कर रहे हैं यदि आप शून्य reducers निर्दिष्ट (setNumReduceTasks (0))। फिर, MapReduce का कार्य मैप चरण पर रुक जाता है, और मैप चरण में किसी भी प्रकार की छंटाई शामिल नहीं होती है (इसलिए मानचित्र चरण भी तेज़ होता है)।
अद्यतन: जब से आप कुछ और आधिकारिक की तलाश कर रहे हैं, तो आप टॉम व्हाइट की पुस्तक "हडोप: द डेफिनिटिव गाइड" भी पढ़ सकते हैं। यहां आपके प्रश्न का दिलचस्प हिस्सा है।
टॉम व्हाइट फरवरी 2007 से एक अपाचे हडोप कम्यूटेटर है, और अपाचे सॉफ्टवेयर फाउंडेशन का सदस्य है, इसलिए मुझे लगता है कि यह बहुत विश्वसनीय और आधिकारिक है ...
आइए Mapreduce प्रोग्राम के मुख्य चरणों को फिर से देखें।
नक्शा चरण मानचित्रकारों द्वारा किया जाता है। मैपर अनसोल्ड इनपुट की / वैल्यू पेयर पर चलते हैं। प्रत्येक मैपर प्रत्येक इनपुट कुंजी / मान जोड़े के लिए शून्य, एक या कई आउटपुट कुंजी / मान जोड़े का उत्सर्जन करता है।
गठबंधन चरण समेलक द्वारा किया जाता है। Combiner एक ही कुंजी के साथ कुंजी / मान जोड़े संयोजित करने होंगे। प्रत्येक कंबाइनर शून्य, एक बार या कई बार चल सकता है।
फेरबदल और प्रकार चरण रूपरेखा द्वारा किया जाता है। सभी मैपर्स के डेटा को कुंजी द्वारा समूहीकृत किया जाता है, पुनर्विक्रेताओं के बीच विभाजित किया जाता है और कुंजी द्वारा क्रमबद्ध किया जाता है। प्रत्येक reducer एक ही कुंजी के साथ जुड़े सभी मूल्यों को प्राप्त करता है। प्रोग्रामर छँटाई के लिए कस्टम तुलना कार्यों और डेटा विभाजन के लिए एक विभाजनक की आपूर्ति कर सकता है ।
विभाजक का फैसला करता है जो कम करने के लिए एक विशेष कुंजी मान जोड़ी मिल जाएगा।
कम करने प्राप्त कुंजी / [मूल्यों सूची] जोड़े के अनुसार क्रमबद्ध, कुंजी के अनुसार क्रमबद्ध। मान सूची में मैपर्स द्वारा उत्पादित एक ही कुंजी के साथ सभी मान शामिल हैं। प्रत्येक रिड्यूसर प्रत्येक इनपुट कुंजी / वैल्यू पेयर के लिए शून्य, एक या कई आउटपुट कुंजी / मान जोड़े का उत्सर्जन करता है ।
एक बेहतर समझ के लिए दत्ता द्वारा मारिया जुरकोविकोवा और mssqltltips लेख के इस javacodegeeks लेख पर एक नज़र है
नीचे safaribooksonline लेख से छवि है
ie
Reducers और Output के स्ट्रिंग्स वास्तव में होने चाहिए is
।
मैंने उपरोक्त उत्तरों में गायब कुछ बिंदुओं को जोड़ने के बारे में सोचा। यहाँ से लिया गया यह चित्र स्पष्ट रूप से बताता है कि वास्तव में क्या हो रहा है।
अगर मैं फिर से वास्तविक उद्देश्य के बारे में बताता हूं
स्प्लिट: विभिन्न नोड्स (मैपर) में प्रसंस्करण भार को वितरित करके समानांतर प्रसंस्करण में सुधार करता है, जो समग्र प्रसंस्करण समय को बचाएगा।
गठबंधन: प्रत्येक मैपर के उत्पादन को सिकोड़ता है। यह डेटा को एक नोड से दूसरे तक ले जाने में लगने वाले समय की बचत करेगा।
सॉर्ट (शफल और सॉर्ट): नए रेड्यूसर को शेड्यूल (स्पॉन / स्टार्ट) करने के लिए रन-टाइम के लिए आसान बनाता है, जहां सॉर्ट किए गए आइटम सूची से गुजरते समय, जब भी वर्तमान कुंजी पिछले से अलग होती है, तो यह एक नया रिड्यूसर स्पॉन कर सकता है। ।
मैंने हमेशा माना है कि यह आवश्यक था क्योंकि मैपर से आउटपुट रिड्यूसर के लिए इनपुट है, इसलिए इसे कीस्पेस के आधार पर सॉर्ट किया गया था और फिर प्रत्येक रिड्यूसर इनपुट के लिए बकेट में विभाजित किया गया था। आप एक ही बाल्टी में की एंड के सभी समान मूल्यों को सुनिश्चित करना चाहते हैं ताकि वे एक साथ कम हो जाएं। अलग-अलग रिड्यूसर को K1, V2 और K1, V4 भेजने का कोई मतलब नहीं है क्योंकि उन्हें कम करने के लिए एक साथ होने की आवश्यकता होती है।
जितनी जल्दी हो सके इसे समझाने की कोशिश की
शफलिंग वह प्रक्रिया है जिसके द्वारा मैपर्स से मध्यवर्ती डेटा को 0,1 या अधिक रिड्यूसर में स्थानांतरित किया जाता है। प्रत्येक रिड्यूसर को 1 या अधिक कुंजियाँ और इसके संबद्ध मान रिड्यूसर की संख्या (एक संतुलित लोड के लिए) के आधार पर प्राप्त होते हैं। इसके अलावा प्रत्येक कुंजी से जुड़े मान स्थानीय रूप से सॉर्ट किए जाते हैं।
MapReduce NATIVELY: सॉर्ट और (सॉर्ट द्वारा लागू) स्केलेबल GroupBy केवल दो चीजें हैं।
MapReduce पर अधिकांश एप्लिकेशन और डिज़ाइन पैटर्न इन दो ऑपरेशनों पर बनाए गए हैं, जो कि फेरबदल और सॉर्ट द्वारा प्रदान किए जाते हैं।
यह एक अच्छी रीडिंग है। आशा करता हूँ की ये काम करेगा। आपके द्वारा छांटे जाने के संदर्भ में, मुझे लगता है कि यह मानचित्र के अंतिम चरण में मर्ज ऑपरेशन के लिए है। जब मानचित्र संचालन किया जाता है, और परिणाम को स्थानीय डिस्क पर लिखने की आवश्यकता होती है, तो बफर से उत्पन्न विभाजन पर एक बहु-मर्ज संचालित किया जाएगा। और एक मर्ज ऑपरेशन के लिए, उन्नत में प्रत्येक विभाजन को छांटना मददगार होता है।
ठीक है, में MapReduce वहाँ दो महत्वपूर्ण वाक्यांशों कहा जाता है मैपर और कम करने के लिए दोनों बहुत महत्वपूर्ण हैं, लेकिन प्रसारण अनिवार्य है। कुछ कार्यक्रमों में reducers वैकल्पिक हैं। अब आपके सवाल पर आता हूं। मेप्रेडिसेस में फेरबदल और छंटाई दो महत्वपूर्ण ऑपरेशन हैं। पहले Hadoop फ्रेमवर्क संरचित / असंरचित डेटा लेता है और डेटा को Key, Value में अलग करता है।
अब मैपर प्रोग्राम को अलग किया जाता है और डेटा को संसाधित करने के लिए कुंजी और मान में व्यवस्थित करता है। कुंजी 2 और मान 2 मान उत्पन्न करें। यह मान वांछित समाधान प्राप्त करने के लिए उचित क्रम में प्रक्रिया और पुन: व्यवस्था करना चाहिए। अब यह फेरबदल और आपके स्थानीय सिस्टम में की गई छंटनी (फ्रेमवर्क इसे ध्यान में रखता है) और प्रक्रिया के बाद स्थानीय प्रणाली में प्रक्रिया स्थानीय डेटा में डेटा की सफाई करती है। ठीक
यहां हम इस फेरबदल और सॉर्ट प्रक्रिया को अनुकूलित करने के लिए कंबाइनर और विभाजन का भी उपयोग करते हैं। उचित व्यवस्था के बाद, उन महत्वपूर्ण मानों को वांछित ग्राहक का आउटपुट प्राप्त करने के लिए Reducer पास करता है। अंत में Reducer वांछित उत्पादन प्राप्त करते हैं।
के 1, वी 1 -> के 2, वी 2 (हम प्रोग्राम मैपर लिखेंगे), -> के 2, वी '(यहां डेटा को फेरबदल और नरम करें) -> के 3, वी 3 आउटपुट उत्पन्न करते हैं। K4, V4।
कृपया ध्यान दें कि ये सभी चरण केवल तार्किक संचालन हैं, मूल डेटा को नहीं बदलते हैं।
आपका प्रश्न: मैप रिड्यूस प्रोग्रामिंग में रिड्यूसर में फेरबदल और छँटाई का क्या उद्देश्य है?
संक्षिप्त उत्तर: वांछित आउटपुट प्राप्त करने के लिए डेटा को संसाधित करना। फेरबदल डेटा कुल है, कम अपेक्षित उत्पादन मिलता है।