Hadoop में जब कार्य कम हो जाते हैं? क्या वे मैपर के एक निश्चित प्रतिशत (दहलीज) के बाद शुरू होते हैं? यदि हां, तो क्या यह सीमा तय है? आमतौर पर किस तरह की दहलीज का उपयोग किया जाता है?
Hadoop में जब कार्य कम हो जाते हैं? क्या वे मैपर के एक निश्चित प्रतिशत (दहलीज) के बाद शुरू होते हैं? यदि हां, तो क्या यह सीमा तय है? आमतौर पर किस तरह की दहलीज का उपयोग किया जाता है?
जवाबों:
कम चरण में 3 चरण हैं: फेरबदल, सॉर्ट, कम करें। फेरबदल वह जगह है जहाँ डेटा को प्रत्येक मैपर से रिड्यूसर द्वारा एकत्र किया जाता है। यह तब हो सकता है जब मैपर्स डेटा उत्पन्न कर रहे हैं क्योंकि यह केवल डेटा ट्रांसफर है। दूसरी ओर, सभी मैपर्स किए जाने के बाद ही सॉर्ट और कम करना शुरू हो सकता है। आप बता सकते हैं कि Reducer पूरा होने के प्रतिशत को देखकर कौन सा एक MapReduce कर रहा है: 0-33% का मतलब है कि उसका फेरबदल करना, 34-66% की तरह है, 67% -100% कम है। यही कारण है कि आपके reducers कभी-कभी 33% पर "अटक" लगेंगे - यह मैपर के खत्म होने का इंतजार कर रहा है।
Reducers समाप्त होने वाले मैपर के प्रतिशत की सीमा के आधार पर फेरबदल करना शुरू कर देते हैं। आप जल्दी या बाद में शुरू करने के लिए रिड्यूसर प्राप्त करने के लिए पैरामीटर बदल सकते हैं।
क्यों reducers शुरू कर रहा है एक अच्छी बात है? क्योंकि यह समय के साथ मैपर्स से रिड्यूसर्स में डेटा ट्रांसफर को फैलता है, जो कि एक अच्छी बात है अगर आपका नेटवर्क अड़चन है।
क्यों reducers जल्दी एक बुरी बात शुरू कर रहा है? क्योंकि वे "हॉग अप" स्लॉट्स को कम करते हैं जबकि केवल डेटा की नकल करते हैं और मैपर के खत्म होने का इंतजार करते हैं। एक और काम जो बाद में शुरू होता है जो वास्तव में कम स्लॉट का उपयोग करेगा अब उनका उपयोग नहीं कर सकता है।
जब reducers के डिफ़ॉल्ट मान बदलकर प्रारंभ करेंगे तो आप को अनुकूलित कर सकते mapred.reduce.slowstart.completed.maps
में mapred-site.xml
। का मान 1.00
reducers शुरू करने से पहले समाप्त करने के लिए सभी मानचित्रकारों के लिए इंतजार करेंगे। मूल्य का एक 0.0
सही दूर reducers शुरू होगा। 0.5
आधे मैपर्स के पूर्ण होने पर रीड्यूसर का मान प्रारंभ हो जाएगा। आप mapred.reduce.slowstart.completed.maps
नौकरी-दर-नौकरी के आधार पर भी बदल सकते हैं । Hadoop (कम से कम 2.4.1) के नए संस्करणों में पैरामीटर कहा जाता हैmapreduce.job.reduce.slowstart.completedmaps
(धन्यवाद उपयोगकर्ता yegor256)।
आमतौर पर, मैं mapred.reduce.slowstart.completed.maps
ऊपर रखना पसंद करता हूं 0.9
अगर सिस्टम में कभी एक साथ कई काम चल रहे हों। जब वे कुछ भी नहीं कर रहे हैं, लेकिन डेटा की नकल कर रहे हैं तो इस तरह से नौकरी को कम नहीं किया जा सकता है। यदि आपके पास केवल एक समय में एक काम चल रहा है, तो 0.1
करना शायद उचित होगा।
रिड्यूसर कहे जाने से बहुत पहले चरण कम हो सकता है। जैसे ही "ए" मैपर काम खत्म करता है, उत्पन्न डेटा कुछ छंटनी और फेरबदल (जिसमें कॉम्बिनर और पार्टीशनर को कॉल शामिल है) से गुजरता है। Reducer "चरण" पल पोस्ट मैपर डेटा प्रोसेसिंग में किक करता है। जैसा कि इन प्रसंस्करण किया जाता है, आप reducers प्रतिशत में प्रगति देखेंगे। हालाँकि, अभी तक किसी भी रेड्यूसर को नहीं बुलाया गया है। उपलब्ध प्रोसेसर की संख्या / उपयोग, डेटा की प्रकृति और अपेक्षित रेड्यूसर की संख्या के आधार पर, आप @ डोनाल्ड-माइनर द्वारा वर्णित पैरामीटर को बदलना चाह सकते हैं।
जितना मैं समझता हूं कि चरण चरण मानचित्र चरण से शुरू होते हैं और नक्शे से रिकॉर्ड का उपभोग करते रहते हैं। हालाँकि, चूंकि मानचित्र चरण के बाद सॉर्ट और फेरबदल चरण होता है, इसलिए सभी आउटपुट को सॉर्ट करना और रिड्यूसर को भेजना होता है। तो तार्किक रूप से आप कल्पना कर सकते हैं कि कम चरण मानचित्र चरण के बाद ही शुरू होता है, लेकिन वास्तव में प्रदर्शन कारण के लिए reducers को मैपर्स के साथ भी आरंभ किया जाता है।
कम चरण के लिए दिखाया गया प्रतिशत वास्तव में मैप आउटपुट से रीड्यूसर इनपुट निर्देशिकाओं में कॉपी किए गए डेटा की मात्रा के बारे में है। यह जानने के लिए कि यह नकल कब शुरू होती है? यह एक कॉन्फ़िगरेशन है जिसे आप डोनाल्ड के ऊपर दिखाए गए अनुसार सेट कर सकते हैं। एक बार जब सभी डेटा को reducers (यानी 100% कम) पर कॉपी कर लिया जाता है, जब रीड्यूसर काम करना शुरू कर देता है और इसलिए "reducers कोड I / O या CPU गहन हो तो" 100% कम "" फ्रीज हो सकता है।
बेहतर तरीके से काम करने के तरीके को समझने के लिए WordCount उदाहरण पर विचार करें। मान लें कि हमारे पास एक बड़ी फ़ाइल है, एक उपन्यास कहें और हमारा काम यह है कि फ़ाइल में प्रत्येक शब्द जितनी बार आता है, उसे ढूंढें। चूंकि फ़ाइल बड़ी है, इसलिए इसे विभिन्न ब्लॉकों में विभाजित किया जा सकता है और विभिन्न कार्यकर्ता नोड्स में दोहराया जा सकता है। शब्द गणना कार्य मानचित्र से बना है और कार्यों को कम करता है। मानचित्र कार्य प्रत्येक ब्लॉक को इनपुट के रूप में लेता है और एक मध्यवर्ती कुंजी-मूल्य जोड़ी बनाता है। इस उदाहरण में, चूंकि हम शब्दों की संख्या की गणना कर रहे हैं, इसलिए ब्लॉक को संसाधित करते समय मैपर फॉर्म के मध्यवर्ती परिणाम (शब्द 1, काउंट 1), (वर्ड 2, काउंट 2) इत्यादि में सभी मैपर के मध्यवर्ती परिणाम होते हैं। एक फेरबदल चरण के माध्यम से पारित किया गया है जो मध्यवर्ती परिणाम को फिर से व्यवस्थित करेगा।
मान लें कि विभिन्न मैपर्स से हमारा मैप आउटपुट निम्न रूप में है:
मानचित्र 1: - (है, 24) (था, 32) (और, 12)
Map2: - (मेरा, 12) (है, 23) (था, 30)
मैप आउटपुट को इस तरह से सॉर्ट किया जाता है कि एक ही रीड्यूसर को एक ही कुंजी मान दिया जाता है। यहाँ इसका मतलब यह होगा कि जो कुंजी के अनुरूप है, आदि वही reducer था। यह reducer है जो अंतिम आउटपुट का उत्पादन करता है, जो इस मामले में होगा: - (और, 12) (है, 47) (मेरा, 12) ) (था, 62)
Reducer कार्य के बाद ही शुरू होता है completion
सभी मैपर्स के ।
लेकिन इसके बाद डेटा ट्रांसफर होता है each
मैप के । दरअसल यह एक पुल ऑपरेशन है।
इसका मतलब है कि, हर बार Reducer हर maptask से पूछ रहा होगा कि क्या उनके पास Map से फिर से आने के लिए कुछ डेटा है। अगर उन्हें कोई मैपर अपना काम पूरा करता है, तो Reducer मध्यवर्ती डेटा को खींचता है।
मैपर से मध्यवर्ती डेटा को संग्रहीत किया जाता है disk
। और मैपर से रिड्यूस में डेटा ट्रांसफर नेटवर्क के माध्यम से होता है ( Data Locality
यह रिड्यूस चरण में संरक्षित नहीं है)