2013-07-03 5 views
11

में डेटा कैसे विभाजित किया गया है क्या हैडोप प्रोग्राम में सेट मैपर्स की संख्या के आधार पर डेटा को विभाजित करता है? इसका मतलब है कि आकार 500 एमबी का डेटा सेट है, यदि मैपर की संख्या 200 है (मान लीजिए कि हैडोप क्लस्टर 200 मैपर एक साथ अनुमति देता है), क्या प्रत्येक मैपर को 2.5 एमबी डेटा दिया जाता है?हाडोप

इसके अलावा, सभी मैपर एक साथ चलते हैं या उनमें से कुछ धारावाहिक में भाग सकते हैं?

उत्तर

0

मैं सिर्फ अपने प्रश्न के आधार पर एक नमूना एमआर कार्यक्रम भाग गया और यहाँ मेरी खोजने

इनपुट है: एक फ़ाइल छोटे कि ब्लॉक आकार।

केस 1: मैपर = 1 परिणाम: 1 नक्शा कार्य लॉन्च किया गया। प्रत्येक मैपर के लिए इनपुट आकार (इस मामले में केवल एक) इनपुट फ़ाइल आकार के समान है।

केस 2: मैपर की संख्या = 5 परिणाम: 5 मानचित्र कार्य लॉन्च किए गए। प्रत्येक मैपर के लिए इनपुट आकार इनपुट इनपुट फ़ाइल आकार का पांचवां हिस्सा है।

केस 3: मैपर की संख्या = 10 परिणाम: 10 मानचित्र कार्य लॉन्च किए गए। प्रत्येक मैपर के लिए इनपुट आकार इनपुट इनपुट फ़ाइल आकार का 10 वां है।

तो कम तो ब्लॉक आकार,

विभाजन आकार = कुल इनपुट फ़ाइल आकार/मानचित्र का शुभारंभ किया कार्य की संख्या से ऊपर के आधार पर, फ़ाइल के लिए।

नोट: लेकिन ध्यान रखें कि नहीं। मानचित्र कार्य का इनपुट इनपुट विभाजन के आधार पर तय किया जाता है।

+0

इसके अलावा, सभी मैपर एक साथ चलते हैं या उनमें से कुछ धारावाहिक में भाग सकते हैं? - यदि पर्याप्त नक्शा स्लॉट हैं तो सभी मानचित्र कार्य एक साथ लॉन्च किए जाएंगे। यदि आपके पास उपलब्ध स्लॉट की तुलना में अधिक नक्शा कार्य हैं तो अतिरिक्त मानचित्र कार्य पूरा करने के लिए मैपर चलाने के लिए प्रतीक्षा करेंगे। –

+0

यह भी ध्यान दें कि मैंने माना है कि आप पुराने मानचित्रित एपीआई का उपयोग कर रहे हैं क्योंकि मेरा कोड उस पर आधारित है। FileInputFormat के getSplits का हस्ताक्षर यहां दिया गया है और इसमें पैरामीटर के रूप में numSplits है। सार्वजनिक इनपुटप्लिट [] getSplits (जॉबकॉन्फ़ जॉब, int numSplits) –

+0

यह दूसरी तरफ है – Tagar

6

जब आप हडोप वितरित फ़ाइल सिस्टम (एचडीएफएस) में डेटा इनपुट करते हैं, तो हैडोप ब्लॉक आकार (डिफ़ॉल्ट 64 एमबी) के आधार पर आपके डेटा को विभाजित करता है और क्लस्टर में ब्लॉक वितरित करता है। तो आपका 500 एमबी 8 ब्लॉक में विभाजित किया जाएगा। यह मैपर्स की संख्या पर निर्भर नहीं है, यह एचडीएफएस की संपत्ति है।

अब, जब आप MapReduce नौकरी चलाते हैं, तो डिफ़ॉल्ट रूप से हैडोप प्रति ब्लॉक 1 मैपर निर्दिष्ट करता है, इसलिए यदि आपके पास 8 ब्लॉक हैं, तो हैडोप 8 मानचित्र कार्यों को चलाएगा।

हालांकि, यदि आप स्पष्ट रूप से मैपर्स की संख्या निर्दिष्ट करते हैं (यानी 200), तो प्रत्येक मानचित्र द्वारा संसाधित डेटा का आकार ब्लॉक के वितरण पर निर्भर करता है, और जिस पर आपका नक्शा चल रहा है। वास्तव में आपके डेटा को कितने मैपर्स संसाधित करते हैं आपके इनपुट विभाजन पर निर्भर करता है।

आपके मामले में, 500 एमबी 8 ब्लॉक में विभाजित मानते हैं, भले ही आप 200 मैपर निर्दिष्ट करते हैं, फिर भी वे सभी डेटा को संसाधित नहीं करेंगे, भले ही वे प्रारंभ हो जाएं।

+0

धन्यवाद। लेकिन जॉब काउंटर से पता चलता है कि 200 मैपर लॉन्च किए गए हैं! तुम्हारा मतलब है कि असली नहीं है? –

+1

उस स्थिति में अधिकांश मैपर चलेंगे लेकिन डेटा संसाधित नहीं करेंगे। मुझे लगता है कि जब आप मैपर लॉग की जांच करेंगे तो आपको यह पता चल जाएगा, उनमें से अधिकांश में इनपुट/आउटपुट डेटा नहीं होगा। मैं इसे प्रतिबिंबित करने के लिए अपना उत्तर संपादित करूंगा। – Chaos

23

यह एक और तरीका है। विभाजन की संख्या के आधार पर मैपर की संख्या तय की जाती है। हकीकत में यह विभाजन बनाने के लिए InputFormat का उपयोग है, जिसका आप उपयोग कर रहे हैं। जब तक विभाजन की संख्या तय नहीं की जाती है तब तक आपको मैपर की संख्या के बारे में कोई जानकारी नहीं है। और, यह हमेशा नहीं होता है कि विभाजन एचडीएफएस ब्लॉक आकार के आधार पर बनाए जाएंगे। यह आपके इनपुटफॉर्मैट की getSplits() विधि के अंदर तर्क पर निर्भर करता है।

बेहतर समझने के लिए, मान लें कि आप एमआर का उपयोग करके अपने MySQL में संग्रहीत डेटा संसाधित कर रहे हैं। चूंकि इस मामले में ब्लॉक की कोई अवधारणा नहीं है, इसलिए सिद्धांत जो एचडीएफएस ब्लॉक के आधार पर हमेशा बनाए जाते हैं, विफल रहता है। सही? तब विभाजन के निर्माण के बारे में क्या?एक संभावना है कि आपकी MySQL तालिका में पंक्तियों की श्रेणियों के आधार पर विभाजन बनाएं (और यह DBInputFormat है, एक संबंधपरक डेटाबेस से डेटा पढ़ने के लिए एक इनपुट प्रारूप)। मान लें कि आपके पास 100 पंक्तियां हैं। फिर आपके पास प्रत्येक 20 पंक्तियों के 5 विभाजन हो सकते हैं।

यह केवल FileInputFormat (फ़ाइलों में संग्रहीत डेटा को संभालने के लिए एक इनपुटफॉर्मैट) के आधार पर इनपुटफॉर्मैट्स के लिए है, जो कि इनपुट फ़ाइलों के बाइट्स में कुल आकार के आधार पर विभाजित किए जाते हैं। हालांकि, इनपुट फाइलों के फाइलसिस्टम को अवरुद्ध करने के लिए इनपुट विभाजन के लिए ऊपरी बाध्य माना जाता है। यदि आपके पास एचडीएफएस ब्लॉक आकार से छोटी फ़ाइल है, तो आपको उस फ़ाइल के लिए केवल 1 मैपर मिलेगा। यदि आप कुछ अलग व्यवहार करना चाहते हैं, तो आप mapred.min.split.size का उपयोग कर सकते हैं। लेकिन यह फिर से आपके इनपुटफॉर्मैट के getSplits() पर निर्भर करता है।

एमआर split और एचडीएफएस block के बीच एक मौलिक अंतर है और लोग अक्सर इस से भ्रमित हो जाते हैं। एक ब्लॉक डेटा का एक भौतिक टुकड़ा है जबकि विभाजन एक तार्किक टुकड़ा है जिसे मैपर को खिलाया जा रहा है। एक विभाजन में इनपुट डेटा नहीं होता है, यह केवल डेटा का संदर्भ है। फिर एक विभाजन क्या है? एक विभाजन में मूल रूप से 2 चीजें हैं: length in bytes और storage locations का एक सेट, जो कि होस्टनाम स्ट्रिंग्स हैं।

आपके प्रश्न पर वापस आ रहा है। हैडोप 200 से अधिक मैपर की अनुमति देता है। ऐसा कहकर, यह 500 एमबी डेटा के लिए 200 मैपर होने के लिए ज्यादा समझ में नहीं आता है। हमेशा याद रखें कि जब आप हडोप के बारे में बात करते हैं, तो आप बहुत विशाल डेटा से निपट रहे हैं। प्रत्येक मैपर में केवल 2.5 एमबी डेटा भेजना एक ओवरकिल होगा। और हां, यदि कोई मुफ्त सीपीयू स्लॉट नहीं है तो कुछ मैपर मौजूदा मैपर्स के पूरा होने के बाद चल सकते हैं। लेकिन एमआर ढांचा बहुत बुद्धिमान है और इस तरह की स्थिति से बचने के लिए अपनी पूरी कोशिश करता है। यदि मशीन जहां संसाधित डेटा मौजूद है, तो कोई मुफ्त सीपीयू स्लॉट नहीं है, डेटा को पास के नोड में स्थानांतरित किया जाएगा, जहां फ्री स्लॉट उपलब्ध हैं, और संसाधित हो जाएं।

HTH

0

200 नक्शाकार डेटा की 500MB के लिए चला रहे हैं, तो आप प्रत्येक व्यक्ति फ़ाइल आकार के लिए जाँच करने की जरूरत है। यदि वह फ़ाइल आकार ब्लॉक आकार (64 एमबी) से कम है तो यह प्रत्येक फ़ाइल के लिए मानचित्र कार्य चलाएगा।

आम तौर पर हम छोटी-छोटी फ़ाइलों बड़ी फ़ाइल में (ब्लॉक आकार से अधिक आकार)

0

नहीं, ये नहीं है मर्ज करें।

नौकरी के लिए मैपर की संख्या फ्रेमवर्क द्वारा परिभाषित की गई है।

अपाचे MapReduce ट्यूटोरियल लिंक पर एक नज़र डालें।

कितने मानचित्र?

नक्शे की संख्या आम तौर पर, कि है, आदानों का कुल आकार से प्रेरित है इनपुट फ़ाइलों के ब्लॉक की कुल संख्या।

मानचित्रों के लिए समांतरता का सही स्तर लगभग 10-100 मानचित्र प्रति-नोड लगता है, हालांकि इसे बहुत सीपीयू-प्रकाश मानचित्र कार्यों के लिए 300 मानचित्रों तक स्थापित किया गया है। कार्य सेटअप में कुछ समय लगता है, इसलिए यदि नक्शे निष्पादित करने में कम से कम एक मिनट लगते हैं तो यह सर्वोत्तम होता है।

इस प्रकार, यदि आप 10TB इनपुट डेटा की अपेक्षा करते हैं और 128 एमबी का अवरोध है, तो आप 82,000 मानचित्रों के साथ समाप्त हो जाएंगे, जब तक कि कॉन्फ़िगरेशन.सेट (MRJobConfig.NUM_MAPS, int) (जो केवल ढांचे को संकेत देता है)) इसे पर सेट करने के लिए भी उपयोग किया जाता है।

आपके प्रश्नों के लिए वापस आ रहा है:

यही है, आकार 500MB के एक डेटा सेट होने, अगर मानचित्रकारों की संख्या 200 (यह सोचते हैं कि Hadoop क्लस्टर 200 मानचित्रकारों एक साथ की अनुमति देता है) है, प्रत्येक है मैपर ने 2.5 एमबी डेटा दिया?

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

क्या सभी मैपर एक साथ चलते हैं या उनमें से कुछ धारावाहिक में भाग सकते हैं?

सभी मैपर एक साथ चलते हैं। लेकिन रेड्यूसर केवल तभी चलाएगा जब सभी मैपरों के आउटपुट की प्रतिलिपि बनाई गई हो और उनके लिए उपलब्ध हो।

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