नमस्ते। आज हम MapReduce (मैप रीडुस) पर कुछ चर्चा करेंगे। पहले भी हमने MapReduce पर चर्चा की है। तो, आज हम एक या दो समस्याओं को हल करने की कोशिश करेंगे या यह देखने की कोशिश करेंगे कि कैसे हम MapReduce ((मैप रीडुस) ) सेसमस्या हम किसी समस्या को विघटित कर सकते हैं और उस पर कैसे काम कर सकते हैं। इसलिए, यदि आपको याद है कि MapReduce (मैप रीडुस) प्रतिमान का उपयोग डेटा की विशाल मात्रा को संसाधित करने के लिए किया जाता है, जहां पक्षाघात संभव है। और मुख्य रूप से गुगल (Google) द्वारा विकसित होता है और बाद में विभिन्न क्षेत्रों में उपयोग किया जाता है। तो अब हम MapReduce (मैप रीडुस) के ढांचे से संबंधित एक या दो समस्याएं को देखने से पहले शुरुआत की कुछ स्लाइड्स को देखेंगे। इसलिए, जैसा कि हमने पहले भी चर्चा की है, यह Google पर विकसित एक प्रोग्रामिंग मॉडल है, जिसका मूल उद्देश्य बड़े पैमाने पर खोज को लागू करना है । बिग टेबल और जीएफएस (Big Table and GFS) वितरित फाइल सिस्टम का उपयोग करके संग्रहीत डेटा का उपयोग करके बड़े पैमाने पर स्केलेबल वेब डेटा (web data) पर टेक्स्ट प्रोसेसिंग अथवा गुगल (Google) फ़ाइल सिस्टम और बड़ा डेटा; बड़े मेज। तो, यह गुगल (Google) का एक उद्देश्य था जिसने इसे शुरू किया जहा बड़े पैमाने पर समांतर गणना द्वारा डेटा की बड़ी मात्रा को प्रसंस्करण और उत्पन्न करने के लिए डिज़ाइन; एक समय में दसियों और प्रोसेसर का उपयोग होना । तो, क्या चीजों के अंदर एक अंतर्निहित समांतरता है या नहीं या इन चीज़ में इसका उपयोग हो सकता है या नहीं, इसलिए इसे ऐसा बनाया गया है की यह गलती भी सहन कर सके; इसका मतलब है की गणना की प्रगति सुनिश्चित करें भले ही प्रोसेसर या नेटवर्क विफल हो। तो, यह मूल धारणा थी। आइए हम ऐसा करने की पूर्व शर्त (precondition) कहें या मूल रूप से कहें की हडोप (Hadoop) जैसी कई चीजें हैं जिसका MapReduce (मैप रीडुस) के खुले स्रोत कार्यान्वयन; संयोग से यह याहू ( yahoo) द्वारा विकसित किया गया था; अमेज़ॅन ईसी 2(Amazon EC2) पर पूर्व पैक किए गए एएमआई (AMIs ) पर उपलब्ध है। तो, अगर हम इसे इसके इतिहास से अलग देखते हैं तो, यह एक समानांतर प्रोग्रामिंग अबास्ट्रक्शन है जो कई अलग-अलग समानांतर अनुप्रयोगों द्वारा उपयोग किया जाता है। जो हजारों प्रोसेसर से जुड़े बड़े पैमाने पर गणना करता है। तो, फिर से हम हम अंडरलाइनिंग गलती सहिष्णु कार्यान्वयन कर रहे हैं; दोनों डेटा पक्ष और प्रोसेसर और नेटवर्क पक्ष पर। तो, सब कुछ गलती सहनशील (fault tolerant) है जो दो चरणों में बांटा गया है और एक नक्शा चरण है। तो, मैपिंग के अनुसार एक समस्या दी गई है जिसे मैं दो चरणों में विभाजित करता हूं। यह एक मध्यवर्ती परिणाम में मैप किया गया है और एक को कम कर दिया गया है । फिर, समारोह को कम करें या चरण को कम करें; उन परिणामों को वास्तविक परिणामों में कम करें और ऐसा करने में हमने हाल ही में एक व्याख्यान की या MapReduce (मैप रीडुस) पर पहले भी चर्चा में जो देखा है, उसमें हम पर्याप्त समानांतर दक्षता प्राप्त कर सकते हैं। जब हम बड़ी मात्रा में डेटा से निपट रहे हैं और प्रक्रिया में अंतर्निहित समांतरता है। तो, हम वहां क्या देखते हैं एम(M) मैपर प्रोसेसर ( mapper processor) और आर(R) रेड्यूसर प्रोसेसर (reducer processors) की संख्या है जिनको समस्या के आधार पर काम सौंपा गया है। तो, एक मास्टर नियंत्रक, एम मैपर प्रोसेसर है और उस पर काम करने वाले रेड्यूसर सेल प्रोसेसर की आर संख्या है। और कुछ मामलों में यह मैपर और रेड्यूसर (reducer) प्रोसेसर एक ही भौतिक आधारभूत संरचना पर साझा कर सकते हैं। इसलिए इसका मतलब है, कभी-कभी हम एक मैपर के रूप में कार्य करते हैं और बाद में एक रेड्यूसर प्रकार की चीजों के रूप में कार्य करते हैं। तो, यह डेवलपर के अनुसार हमारी क्षमता है और या यह कह सकते है कि आप इन मैपिंग और मानचित्र को कैसे तैयार करते हैं और कार्यों को कम करते हैं। कार्यान्वयन भी उस भाषा पर आधारित है जैसे डेवलपर काम कर रहा है, शायद बहुत सारे हैं; इसका मतलब है कि लोग पाइथन (python) पर काम कर रहे हैं या सी प्लस प्लस (c plus plus ) पर और अन्य इस प्रकार की कोडिंग चीजों पर कार्य कर रहें है। तो, कोडिंग भाग उन बातों पर आधारित है कि आप किस प्रकार की समस्या और पर्यावरण पर काम कर रहे हैं। लेकिन मुख्य रूप से एक दर्शन में मैपर की संख्या और रेड्यूसर (reducer) का एक सेट है और आपके पास इस बात में मध्यवर्ती परिणाम हैं। इसलिए, जैसा कि हमने पहले भी चर्चा की थी कि प्रत्येक मैप एक प्रत्येक मैपर वैश्विक फ़ाइल सिस्टम से इनपुट के 1 एम (1 M) पढ़ता है,अपने मास्टर द्वारा दिए गए स्थानों का उपयोग करके। तो, मास्टर नियंत्रक नोड के अनुसार ये वे भाग हैं जिन्हें आपको पढ़ने की आवश्यकता है। इसलिए, मानचित्र फ़ंक्शन में एक कुंजी (key) मान जोड़ी से दूसरे कुंजी मान जोड़ी में परिवर्तन होता है। यहां की तरह मेरे पास एक के 1 है, v1 मैप किया गया k2, v2 (k1, v1 mapped to k2, v2), प्रत्येक मैपर प्रति रेड्यूसर (reducer) एक फ़ाइल के गणना परिणाम लिखता है। इसलिए, यह आमतौर पर तैयार किया जाता है और यदि आर reducers हैं। इसलिए, यदि एक रेड्यूसर (reducer) है, तो यह प्रति फ़ाइल एक के लिए परिणाम तैयार करता है और यह यह उपयोगकर्ता के लिए एक फाइल बनाता है। फ़ाइलों को एक कुंजी (key) में संग्रहीत किया जाता है और एक कुंजी (key) द्वारा क्रमबद्ध किया जाता है और स्थानीय फ़ाइल सिस्टम में संग्रहीत किया जाता है। तो, यह एक स्थानीय फाइल सिस्टम है जहां मैपर का आउटपुट संग्रहीत किया जाता है। मास्टर इस फ़ाइल के स्थान का ट्रैक रखता है, मास्टर के पास चीजों की ट्रैकिंग होती है। रेड्यूसर (reducer) चरण या कम चरण पर मास्टर एक रेड्यूसर (reducer) सूचित करता है जहां मैपर ने पूरी प्रक्रिया कीआंशिक गणना की है। संबंधित मैपर्स के लिए स्थानीय फाइल सिस्टम पर संग्रहीत किया गया है। यदि एम (M)मैपर हैं संबंधित मैपर के लिएजहां फ़ाइलों को उस विशेष रेड्यूसर (reducer) के लिए संग्रहीत किया जाता है। रेड्यूसर (reducer) दूरस्थ प्रक्रिया कॉल करते हैं (remote procedure call) की फ़ाइलों का सामना करने के लिए मैपर से अनुरोध करें। प्रत्येक रेड्यूसर (reducer) एक ही कुंजी (key)का उपयोग कर नक्शे टेप के परिणाम समूह और एक समारोह करता है जहा कुछ फ़ंक्शन f और इस मान से संबंधित मानों की सूची। इसका मतलब है, अगर मेरे पास आपके k 2,v 2 के रूप मे है तो मैं इसे k 2 और उस v2 के फ़ंक्शन पर मैप करना होगा। इसलिए, यदि कार्य औसत के रूप में सरल हो सकता है तो, शायद आवृत्ति या गिनती या कुछ और संचालन करने के कुछ जटिल कार्य हो सकते है। इसलिए, परिणाम गुगल (Google) फ़ाइल सिस्टम पर वापस लिखे गए हैं और गुगल (Google) फ़ाइल सिस्टम उनका ख्याल रखता है। तो, MapReduce (मैप रीडुस) का यह एक उदाहरण: 3 मैपर हैं, 2 रेड्यूसर (reducers) और अगर आपको याद है नक्शा समारोह इस मामले में भी है जिसकी चर्चा हमारे पिछले व्याख्यान में हो चुकी हैं। तो, शब्द की एक बड़ी मात्रा है और हम एक शब्द गणना करना चाहते हैं। इसलिए, प्रत्येक मैपर में डेटा की चीजों का एक हिस्सा होता है जैसे इस मैपर में डी 1, डी 2, डी 3 है और यह डी 4, डी 7, डी 8 इत्यादि है। तो, प्रत्येक मैपर शब्द की आंशिक गिनती करता है जैसे डब्ल्यू 1, डब्ल्यू 2, डब्ल्यू 3 और इतने और आगे तक। और दो रेड्यूसर (reducer) हैं, तो यह दोनों रेड्यूसर (reducer) के लिए फ़ाइल बनाता है और इसलिए रेड्यूसर (reducer) w1 और डब्ल्यू के लिए जिम्मेदार है क्या उपयोगकर्ता दो w3 और w4 के लिए है। और हम इस बात पर एक शब्द गिनती करते हैं, जिसमे एक मैपिंग फ़ंक्शन होता है जहां और एक घटता कार्य होता है, जहां मूल रूप से यह कार्य प्रत्येक शब्द के लिए इस गणना के सारांश के लिए होता है:w1। इसलिए, यह इस बात को विभाजित कर रहा है कि MapReduce(मैप रीडुस) समस्या में क्या समस्या है और जैसा की हमनेआखिरी व्याख्यान हमने देखा है कि यह सिस्टम में समानांतर दक्षता दे सकता है। तो, अब हम कुछ समस्याओं को देखते हैं । यह वास्तव में मैड्रिडस समस्या का उधारण नहीं है, बस हडोप फ़ाइल सिस्टम या जीएफएस (Hadoop file system or GFS Hadoop file system or GFS) या गुगल (Google) फाइल सिस्टम जानने के लिए है । इसलिए, अगर ब्लॉक आकार 64 एमबी(MB) है तो आपको याद है कि ये फाइल सिस्टम कभी भी प्राकृतिक फाइल सिस्टम की तुलना में बड़े खंड ब्लॉक आकार के हैं। और एक और बात यह थी कि डेटा के हर उदाहरण की तीन प्रतिकृतियां हैं। तो, एक तीन प्रतिकृति (replica) है जहां आपको एक गलती सहनशील मोड (fault tolerant mode )की अनुमति देता है ओर उस पर आधारित पढ़ना लिखने के संचालन देता हैं। तो, अगर हम इस विशेष चीज़ मे कहते हैं कि यदि एचडीएफएस (HDFS) ब्लॉक आकार 64 एमबी (MB) है, तो हम पता लगाना चाहते हैं की यदि 64 K, 65 एमबी (MB), केबी (Kb) और 127 एमबी की तीन फाइलें हैं। तो, एचडीएफएस (HDFS) ढांचे द्वारा कितने ब्लॉक बनाए जा सकते हैं। तो, अगर 64 केबी (Kb) के लिए कितने ब्लॉक बनाए जाएंगे और 65 एमबी(MB), हमारे पास 2 है क्योंकि 64 एमबी (MB) तक; 1 और 127 एमबी(MB), भी 2. तो, कुल 5, लेकिन हकीकत में क्योंकि आपके पास प्रतिकृतियां (replicas) हैं जो, आमतौर पर 3 प्रतिकृति होती है, इसलिए प्रभावी ब्लॉक आकार 5 बराबर 3 होगा । ये ब्लॉक तो बहुत सीधी चिज है इसमें कोई जटिलता नहीं है, इसलिए यदि मेरे पास अलग-अलग प्रकार की चीज है तो, हम इस की गणना को करने के लिए MapReduce(मैप रीडुस) की तुरंत कोई आवश्यकता नहीं है, लेकिन फिर भी डेटा या तो एचडीएफएस (HDFS) में संग्रहीत किया जाता है या यदि यह एक ओपन सोर्स( open source ) या जीएफएस (GFS)में अगर यह गुगल (Google) फाइल सिस्टम है और इस डेटा आकार या स्टोरेज को बजट की आवश्यकता है, जब आप बड़े डेटा सेट के साथ काम कर रहे हों आपको कितना संग्रहण चाहिए, इस प्रकार के डेटा सेट पर आपको कितना संग्रहण करने की आवश्यकता है। अब, MapReduce (मैप रीडुस) ढांचे पर एक बहुत सीधी सी समस्या दिखाते है, इससे हमें पता चेलेगा की हम कहा इस MapReduce (मैप रीडुस) ढांचे का उपयोअग कर सकते हैं । हालांकि फिर भी हम समस्या की इस सादगी के कारण इसकी बहुत सराहना नहीं कर सकते हैं। लेकिन MapReduce (मैप रीडुस) ढांचे को समझने के लिए, यह अच्छा हो सकता है। तो आप किसी भी भाषा में छद्म कोड (pseudo codes) या कोड (codes) लिखना चाहते हैं तो, वह क्या है और वहां हम क्या करेंगें ? MapReduce (मैप रीडुस) में पूर्णांक (average) के सेट के औसत की गणना करें। इसलिए, सिस्टम में पूर्णांक का एक सेट पंप किया जा रहा है, यह कीबोर्ड या इन्हीं तरह से प्रत्यक्ष इनपुट किया जा सकता है और इसलिए हम पूर्णांक (integers)के सेट का औसत पता लगाना चाहते हैं। दूसरे अर्थ में, इस सामान्य मामले में मैंने पूर्णांक ए (A) को सेट किया है; 10, 20, 30, 40, 50. तो, पूर्णांक (integers )का सेट वहां है इसलिए मैं औसत बनाना चाहता हूं। तो, दूसरे अर्थ में हम मूल रूप से इसे जोड़ना और कारदिनालिटी (cardinality) से विभाजित करना चाहते हैं। तो, पूरी तरह से 5 से विभाजित करना चाहते हैं। तो अब हम इस मामले में हम क्या करेंगें? मास्टर नोड का कहना है कि हम मानते हैं कि तीन मैपर हैं। तो, मैपर नोड्स हैं जिन्हें हम 3 नंबर के रूप में मानते हैं और रेड्यूसर (reducer) के लिए 1 नंबर । तो, एक मास्टर नोड क्या कर सकता है यहाँ या इस मैपर के लिए क्या करता है। चलो ऐसा कहते हैं की यह तीन(3): एम 1, एम 2, एम 3 (M1, M2, M 3) मैपर नोड में विभाजित है। तो, इस डेटा का एक हिस्सा कहता है कि यह पहले व्यक्ति को 10, 20 देता है; 30, 40 और 50. तो, प्रत्येक मैपर चीजों की आंशिक गिनती(partial counting) करता है और यह इन दो चीजों का औसत है। तो, यह कुछ ऐसा है जो औसत और गिनती के रूप में हो सकता है। तो, पहला 15 , 2 फिर 35 कार्डिनियलिटी (cardinalities )2 है और यह 50; 1 है। दूसरे अर्थ में; अस्थायी स्थानीय फाइल सिस्टम में स्टोर 15 ; 2, 35; 2 है । . मूल रूप से मैपर जो भी उत्पादन करता है वह क्मब्य्नेर (combiner) द्वारा है। तो, मैप फंक्शन (map functions ) यह कार्य प्राप्त करना चाहता है। रेडुस (reduce) पर मुख्य रूप से एक रेड्यूसर होता है जो सभी चीजों को लेता है और यह चीजों का औसत होता है। तो, दूसरे अर्थ में यह 15 स्टार (star) 2 है और यहां 35 स्टार 2 और 50 स्टार 1. दूसरे अर्थ में सिग्मा (sigma) योग 150 है और सिग्मा गिनती 5 है। तो, यह कहता है कि 150 बटे (बाई/by) 5 30 हैं और यह मूल रूप से 15 सितारा (star) 2 प्लस 35 स्टार 2 है। तो, समस्या बहुत सरल है मगर सायद आप पता नहीं लगा पाएंगे की यहां बड़ी समस्या क्या है? यदि चीजों की संख्या एक धारा के रूप में बहुत अधिक आ रही है, और तब मैं मूल रूप से समानांतर चीजें कर सकता हूं और इन्हें समानांतर संसाधित किया जाता है अथवा यह एक विशेष रेड्यूसर (reducer) द्वारा कम किया जाता है। तो, अगर हम इसके लिए कोड लिखते हैं तो, ऐसा करने के लिए आप किसी भी भाषा का उपयोग कर सकते हैं। यहां हम पायथन (python) या उस प्रकार की भाषा का उपयोग कर रहे हैं और यहाँ भाषा कोई से फर्क नहीं पड़ता अथवा प्रतिनिधित्व के लिए आप किसी छद्म कोड (pseudo code)और चीजों के प्रकार का उपयोग कर सकते हैं। तो, आपके पास अब मैपर फ़ंक्शन या मैपर डॉट पाई (py) है और यह पाइथन (पाइथन) का एक प्रकार है। इसलिए, हम वाक्यविन्यास (syntax) को बहुत महत्व नहीं दे रहे हैं बल्कि हम अवधारणा को अधिक महत्व दे रहे हैं। तो अगर डैफ मैप (def map) में 1 कम से कम है, तो हम क्या करें? हम 0 के बराबर राशि 0 के लिए 0 के बराबर राशि को प्रारंभ करते हैं, योग राशि के बराबर राशि। तो, प्रत्येक मैपर क्या करता है की वह उस डेटा का हिस्सा लेता है जिसे मास्टर नोड द्वारा आवंटित किया जा रहा है और फिर हमारे मामलों में कितने डेटा हैं? मैपर 1 में 2 डेटा हैं और मैपर 2 में 2 डेटा मैपर 3 है और एम (M)3 में 1 डेटा है । तो, यह प्रत्येक में 2 ; 2 है। हमने प्रत्येक मैपर के लिए यही किया और इसलिए, हम इस मामले में 1 की लंबाई से औसत योग 2 मिला यह इस राशि की तरह 2 की लंबाई से होना चाहिए। या हम सख्ती से कहना चाहेंगे की एक फ्लोटिंग पॉइंट अंतर होने के लिए, फ्लोटिंग पॉइंट विभाजित करें क्योंकि यह एक है, अन्यथा पूर्णांक डिवीजन हो सकते हैं। तो, हम आदर्श रूप से कुछ स्टार 1.0 को लंबाई की लंबाई से विभाजित कर सकते हैं। तो, एक (1) की लंबाई इस मामले में 2 और फिर हम इसे आउटपुट करते हैं। आइए प्रिंट फ़ंक्शन का उपयोग करें, इसे स्थानीय फ़ाइल सिस्टम में आउटपुट करें। तो, यह आदेश बुद्धिमान हो सकता है अथवा यदि आप विभिन्न प्रोग्रामिंग प्रतिमान लंबाई का उपयोग कर रहे हैं तो यह अलग हो सकता है। इसलिए, मैपर मूल रूप से इन डेटा को उत्सर्जित करता है। तो, यह स्थानीय फाइल सिस्टम में संग्रहीत है, इसलिए हम यहकर रहे हैं अब: प्रत्येक मैपर के लिए हम डेटा की एक सूची पढ़ रहे हैं जिसे अपने मास्टर नोड द्वारा असाइन किया जा रहा है, जिससे कुछ मूल्य को मूल्य में प्रारंभ कर रहे हैं और फिर हम जोड़ते हैं कि यह मेरे लूप के लिए क्या कर रहा है। तो, योग को इसकी औसत से गणना करने की गणना करना बल्कि यह कुछ भी नहीं है, लेकिन इसे फ़्लोट विभाजन बनाने के लिए। और फिर यह स्थानीय फ़ाइल सिस्टम में उस मान को उत्सर्जित या डंप कर रहा है और जो रेड्यूसर (reducer) इसे पढ़ा जाएगा। तो, यह बात का मैपर हिस्सा है; इसलिए, अगर हम रेड्यूसर (reducer) भाग को देखते हैं जो हमने कम किया है। तो, यह कुछ ऐसा पढ़ता है की जो भी मैपर चीजों में डंप हो गया है। इसलिए, यदि आप देखते हैं कि यह औसत मूल्य और चीज़ की लंबाई दे रहा है। यहां हम भी उस विशेष चीज़ को बराबर पढ़ते हैं। तो, यहां i की सीमा में 0 और 1की लंबाई है, अगर हम अपनी पिछली चीज़ को देखते हैं तो यह वही कर रहा है; तो, यह क्या कर रहा है, यह मूल रूप से इस तरह के मूल्यों की गणना करने की कोशिश कर रहा है। तो, गिनती प्लस i की लम्बाई के बराबर भी गिनती करें तो, अंत में हम औसत क्या प्राप्त करते हैं। इसे फिर से फ्लोट (float )के लिए योग करें और इसे गुणा करें या आप मूल रूप से टाइपकास्ट भी गिन सकते हैं और फिर इसे औसत प्रिंट कर सकते हैं। तो, यह रेड्यूसर इस स्थानीय फाइल सिस्टम सेक्या ले रहा है और जहाँ केवल एक रेड्यूसर (reducer) हैं। इसलिए, यह सभी मूल्यों और सभी डेटा के लिए लेता है; यह संक्षेप में है कि प्रत्येक मैपर से उत्पादन, इस मामले में 3 हैं। तो, यह 15 में 2 होने वाला है; प्लस 35 में 2 प्लस 50 में 1; गिनती से विभाजित, जो यहां 2 प्लस 2 प्लस 1 है 5. इसलिए, और यह औसत मान की गणना करता है और फिर यह फिर से गुगल (Google) फ़ाइल सिस्टम या हडोप (Hadoop) फ़ाइल सिस्टम के औसत मूल्य को जो भी आवश्यकता है, उसके आधार पर लिखता है। तो, यह फिर से एक सरल सरल बात हो सकती है, लेकिन हम देखते हैं कि मैं एक समस्या को विभाजित कर सकता हूं और क्योंकि वहां समान अंतर्निहित समांतरता है अथवा मैं एक औसत करने के लिए पसंद कर सकता था इसलिए मैंने डेटा का एक हिस्सा लिया है और हम MapReduce (मैप रीडुस) ढांचे में इसका उपयोग करके इसे हल करने का प्रयास करते हैं। इसलिए, यदि डेटा की एक बड़ी मात्रा है तो मैपर; कि मास्टर नोड तदनुसार विभाजित होता है और आंशिक गणना करता है और रेड्यूसर इसे अंतिम गणना से पढ़ता है और करता भी है। तो, यह एक MapReduce (मैप रीडुस) ढांचे का एक सरल उदाहरण है और अगली बार हम एक और समस्या देखेंगे। तो, मैं संगठन XYZ के कुल और औसत वेतन की गणना करना चाहता हूं जहा MapReduce (मैप रीडुस) का उपयोग कर लिंग द्वारा समूहित कुछ संगठन है। तो, इनपुट नाम होगा, लिंग और चीज़ का वेतन यहाँ कुछ ऐसा है: नाम जॉन है, लिंग एम (M) या पुरुष है और वेतन कुछ 10000 इकाई या शायद 10000 डॉलर या कुछ है। और अगला मार्था है, लिंग एफ (F) है और वेतन 15000 है। तो, हम क्या करना चाहते हैं? हम लिंग के अनुसार इस मामले में नर और मादा कि कुल और औसत वेतन कितनी है और वैसे भी कार्डिनिटी (cardinality )द्वारा विभाजित कुल चीजों का औसत वेतन होगा तो, आउटपुट उस रूप में होगा। तो, हम यह देखने की कोशिश करते हैं कि क्या हम इस विशेष समस्या को देखने के लिए MapReduce (मैप रीडुस) समस्या को नियोजित कर सकते हैं। तो, आइए इसे देखें। तो, अब हमारे पास क्या हैं? हमारेपास इस तरह के tuple हैं: नाम, लिंग और वेतन। तो, यह tuple है और हम इस मैप चरण में क्या करना चाहते हैं? इसलिए, इनपुट डेटा जो कुछ भी इनपुट डेटा कहता है वह वहां है और इनपुट डेटा सेट के अलग-अलग सेट हैं। तो, हम क्या करना चाहते हैं? हम केवल यह निकालना चाहते हैं क्योंकि हमें लिंग एम (M) के बारे में परेशान नहीं है; व्यक्ति के नाम के बारे में परेशान है या इसमें आवश्यक नहीं है; तो, वेतन में। इसलिए, हम वहां से दो चीजों की गणना करना चाहते हैं एम (म) वेतन का कहना है; इसलिए, संबंधित और इसलिए, वे इस प्रकार की चीजों का प्रकार करना चाहते हैं या मेरे पास एक महत्वपूर्ण मूल्य जोड़ी हो सकती है। कुंजी (key) यह है की नर या मादा और मूल्य चीजों का वेतन है, या हम कह सकते हैं कि हमारे पास दो प्रकार की एक शब्दकोश संरचना है जिसमें एक महत्वपूर्ण मूल्य जोड़ी है और फिर मै कहता हूं कि यह डिक्ट 1, डिक्ट 2 और इन दो प्रकार की प्रमुख मूल्य जोड़ी है और प्रत्येक 1 के लिए, मेरे पास डिक्ट 1 हो सकता है, तो शायद दूसरे के लिए एक औसत डिक्ट 2 भी हो सकता है; आईडी शायद इसलिए, इस मामले में आईडी इस विशेष नर या मादा है और उसके बाद कुल या औसत वेतन है। तो, दो अलग-अलग कहने के लिए कुल औसत गणना करें और हम मानते हैं कि यह एक शब्दकोश संरचना है और रेड्यूसर (reducer) मूल रूप से यह काम करता है। तो, यह देखना चाहते हैं कि इसका एहसास कैसे करें, तो हम समस्या को अब किस प्रकार देखते हैं। तो, मेरे पास नाम, लिंग और वेतन का एक सेट है; उस लिंग और प्रत्येक टॉपल से वेतन निकालना चाहते हु। तो, अगर मेरे पास एकाधिक मैपर है और इसलिए, मैं उन चीजों को निकालने और डंप को एक विशेष दो प्रकार के शब्दकोश प्रकार के रूप में निकालता हूं। एक है कि दो प्रकार की चीज और एक यह है कि हमारे पास एम (M) और एफ (F) के साथ और रेड्यूसर (reducer) भाग पर क्या है, हम चीजों या किसी भी चीज के कुल और औसत वेतन की गणना करते हैं। तो, फिर हम एक मैपर डॉट py या मैपर डॉट कुछ पायथन (python)प्रकार कोड के रूप में देखते हैं। तो, मै फिर से दोहराना चाहता हूं कि आप किसी भी कोडिंग भाषा के साथ यह कार्य कर सकते हैं जो इसके लिए उपयुक्त है और जो कुछ भी हम कर रहे हैं वह नहीं हो सकता है, वास्तविक पायथन (python)के साथ कुछ वाक्य रचनात्मक समस्या हो सकती है, लेकिन इससे कोई फर्क नहीं पड़ता कि आप यह दिखाना चाहते हैं कि चीजें काम करती हैं और फिर वास्तविक वाक्य रचनात्मक वाक्यविन्यास का पालन किया जाना चाहिए, यदि आप वास्तव में इसे कार्यान्वित करना चाहते हैं। तो, syz dot std एक पंक्ति है और हम इसके साथ क्या करने वाले हैं। तो, हम कुछ ऐसा सोच रहे हैं कि इसे हम अल्पविराम (comma)से अलग करें। तो, अब मैं लाइन 0 के बराबर नाम अलग करता हूं, वेतन का प्रतिनिधित्व sal होगा अथवा उत्पन्न करते समय लाइन 2या मैपर चरण उत्सर्जित करेगाडेटा स्थानीय फाइल सिस्टम में। तो, हम प्रिंट अल्पविराम प्रतिशत डी रखते हैं (print comma percentage d.)। फिर हम क्या करेंगे की लिंग और वेतन जोअन्य अर्थ में यह वाक्यविन्यास हैं आपको उनको जांचने की आवश्यकता है। दूसरी तरफ, हम क्या करते हैं की हम मूल रूप से वेतन या एम (M) और वेतन हिस्से में वेतन में लिंग को डंप करते हैं और जैसा कि आप देखते हैं कि हम इस एम (M) और वेतन हिस्से को उत्पन्न करना चाहते हैं और या तो एम (M) या एफ (F)और वेतन हिस्से को। अब हम रेड्यूसर (reducer) चरण में आयात करते हैं और इसलिए, इसे परिभाषित करें या इस ताना संगठन (dict org ) को कॉल करें जो कि हमारे द्वारा किए गए sys में लाइन के लिए शब्दकोश कक्षा है। तो, अब सवाल यह है की यह क्या पढ़ रहा है? यह मूल रूप से पढ़ रहा है कि लिंग या वह महत्वपूर्ण मूल्य लिंग और चीजों के मूल्य से या दूसरे अर्थ में लिंग और वेतन मूल्यों से डरता (key value fear) है। तो, हमारे पास उस नाम में चीजें नहीं हैं क्योंकि इस विशेष क्वेरी को चीज़ के नाम की आवश्यकता नहीं है; 1 की रेखा। तो, यदि यह पहले से मौजूद है तो इसका मतलब है की एक बार जब आप पढ़ चुके हैं तो dict org; तो, अब हमारा उद्देश्य क्या है? तो मूल रूप से उसी लिंग प्रकार के लिए वेतन मूल्यों को जोड़ने पर वेतन जोड़कर वेतन को जोड़ दें। जो पहले से ही वहाँ है और इसका मतलब है कि अब यह मेरे मौजूदा रेड्यूसर डिक्शनरी गिनती, एक महत्वपूर्ण मूल्य जोड़ी है, इसलिए यदि कुंजी पहले से ही लिंग है या नर या मादा है, तो मैं उन चीज़ों को जोडत पर जाता हूं। और अगर यह यहाँ नहीं है तो इसका मतलब है, यह मूल रूप से प्रारंभिक चीज dict संगठन है। तो, एक खाली चीज के साथ शुरू करते हैं जो अभी पहली बार आया है। इसका मतलब है की यहएक खाली चीज है। इसलिए, यदि यह खाली है तो मूल रूप से प्रारंभ होता है और फिर वेतन संलग्न करें अथवा इसका मतलब है की यह dict org डॉट कुंजी के वेतन के साथ शुरू किया गया है और वेतन औसत योग के बराबर लैंगिक संगठन लिंग की लंबाई से विभाजित लिंग है। इसलिए, यह संक्षेप में चीजों से विभाजित है और कुल वेतन केवल योग अंग लिंग के बराबर है। और फिर हम मूल रूप से दूसरी चीज़ को गुगल (Google) या GFA या HDFS फ़ाइल सिस्टम से वापस लिखते हैं। अगर हम इसे अल्पविराम या टैब से अलग करना चाहते हैं तो कुछ हो सकता है और फिर शायद डी अगर यह एक पूर्णांक है या उस पर आधारित है या अगर यह एक फ्लोट और उन सभी चीजें हैं। तो, हमारे पास लिंग कुल वेतन और वेतन औसत के रूप में है। तो, यही वह चिज है जो हम अंतिम कम सतह पर करते हैं। इसलिए, अगर हम तुरंत देखने की कोशिश करते हैं, तो मैपिंग फ़ंक्शन में हम क्या कर रहे हैं की हमारे पास नाम, लिंग और वेतन जैसी तीन चीजें हैं। हमारा उद्देश्य मानचित्रण (mapping functions)कार्यों के लिए है। तो, यह सब नक्शा (map) को देख कर हम यह पता लगाना कहते हैं की कौन सा लिंग एम (M) और उस वेतन को उस जी एम ( g M) या एफ (F) के साथ रखें और वेतन और रेड्यूसर (reducer) मूल रूप से क्या होगा। इसलिए, यह वास्तव में लिंग और वेतन और रेड्यूसर (reducer) मूल रूप से उस मध्यवर्ती परिणाम निकालने और औसत की कुल गणना की जाएगी। तो, यह ऑपरेशन एक पायथन(python) का प्रकार है और मैं सख्ती से पायथन(python) नहीं कह रहा हूं क्योंकि कुछ वाक्य रचनात्मक समस्या हो सकती है। लेकिन आप इसे किसी भी चीज में कार्यान्वित कर सकते हैं। विचार यह है कि मैं समस्या को छोटे समांतर चीजों में मैपर द्वारा विभाजित करता हूं और फिर दूसरे चरण में reducer इसे एक और महत्वपूर्ण मूल्य जोड़ी में डाल देता है। तो, इनपुट सेट से महत्वपूर्ण मूल्य कुंजी (key) मूल्य जोड़ी के एक सेट के लिए, रेड्यूसर (reducer) उस कुंजी मूल्य जोड़ी लेता है और एक समारोह डालता है। इस मामले में औसत या कुल चीजें या मुख्य मूल्य जोड़ी के दूसरे सेट पर और आखिरकार, यह एचडीएफएस जोड़ी या जीएफएस फाइल सिस्टम ठीक है (HDFS pair or GFS file system ok)। तो, आज हमने देखने कोशिश की यह MapReduce (मैप रीडुस) सरल कार्य समस्याएं कैसे है, हम इसे मानचित्र में कैसे डाल सकते हैं और चीजों को कम कर सकते हैं। यहाँ पर मैपर्स की संख्या उपलब्ध है अथवा अनुमति मूल रूप से संसाधन की उपलब्धता है और कैसे मास्टर नोड्स (master node )इसे विभाजित करते हैं और शब्द के आधार पर रेड्यूसर (reducer) की संख्या भी। आप किस प्रकार की कार्यात्मक चीजें करना चाहते हैं और इसलिए वे नोड मास्टर करते हैं और यह मैपर की संख्या और कई रेड्यूसर (reducer) में विभाजित होता है। समस्या यह है कि समस्या की कार्यक्षमता इस तरह से विभाजित है ताकि इसे दो चरणों में निष्पादित किया जा सके और हम इस तरह के प्रतिमान के समानांतर कार्यान्वयन कर सकते हैं। धन्यवाद।