2012-02-17 15 views
6

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

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

यदि यह संभव है तो कोई सुझाव या सलाह बहुत अच्छी होगी!

धन्यवाद।

उत्तर

7

जब आप hadoop jar कमांड का उपयोग करके मैप्रिडस जॉब शेड्यूल करते हैं, तो जॉबट्रैक निर्धारित करेगा कि आपके काम को निष्पादित करने के लिए कितने मैपर की आवश्यकता है। यह आमतौर पर इनपुट फ़ाइल में ब्लॉक की संख्या द्वारा निर्धारित किया जाता है, और यह संख्या तय की जाती है, भले ही आपके पास कितने कार्यकर्ता नोड्स हों। फिर यह आपके काम को निष्पादित करने के लिए एक या अधिक टास्कट्रैकर्स को सूचीबद्ध करेगा।

एप्लिकेशन जार (-libjars तर्क का उपयोग करके निर्दिष्ट किसी भी अन्य जार के साथ), आपके जार निष्पादित करने के लिए उपयोग की जाने वाली टास्कट्रैक चलाने वाली सभी मशीनों पर स्वचालित रूप से कॉपी की जाती है। यह सब हडोप बुनियादी ढांचे द्वारा संभाला जाता है।

अतिरिक्त टास्कट्रैक जोड़ने से आपके काम की समानांतरता बढ़ जाएगी यह मानते हुए कि अभी तक अनुसूचित नक्शा कार्य हैं। यह क्या नहीं करेगा स्वचालित रूप से अतिरिक्त मानचित्र क्षमता में समानांतर करने के लिए इनपुट को फिर से विभाजित करता है। तो यदि आपके पास 24 की नक्शा क्षमता है (4 डेटा नोड्स में से प्रत्येक पर 6 मैपर मानते हैं), और आपके पास पहले 24 निष्पादन के साथ 100 मानचित्र कार्य हैं, और आप एक और डेटा नोड जोड़ते हैं, तो आपको कुछ अतिरिक्त गति मिल जाएगी। यदि आपके पास केवल 12 मानचित्र कार्य हैं, तो मशीन जोड़ने से आपकी मदद नहीं होगी।

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

+0

धन्यवाद, महान जवाब। यह जावा के साथ समझ में आता है लेकिन क्या यह पाइथन स्ट्रीमिंग का उपयोग करने के साथ भी सच है? – Lostsoul

+2

http://hadoop.apache.org/common/docs/r0.15.2/streaming.html#Package+Files+With+Job+Submissions से: "आप किसी भी निष्पादन योग्य को मैपर और/या reducer के रूप में निर्दिष्ट कर सकते हैं। एक्जिक्यूटिव को क्लस्टर में मशीनों पर पूर्व-अस्तित्व की आवश्यकता नहीं है, हालांकि, यदि वे नहीं करते हैं, तो आपको जॉब सबमिशन के हिस्से के रूप में अपनी निष्पादन योग्य फ़ाइलों को पैक करने के लिए ढांचे को बताने के लिए "-फाइल" विकल्प का उपयोग करना होगा। " टास्कट्रैकर्स जोड़ने के बारे में सब कुछ ऊपर स्ट्रीमिंग के लिए भी सच है। –

0

एक हैडोप क्लस्टर बनाने का प्रयास करने से पहले मैं Amazon's Elastic MapReduce का उपयोग करके हडोप के साथ खेलना चाहता हूं।

उस समस्या के संबंध में जो आप हल करने का प्रयास कर रहे हैं, मुझे यकीन नहीं है कि हैडोप उचित फिट है। हाडोप तुच्छ समानांतर बैच नौकरियों के लिए उपयोगी है: पार्स thousonds (या अधिक) दस्तावेज़, सॉर्टिंग, डेटा को फिर से बाल्टी करना)। हैडोप स्ट्रीमिंग आपको अपनी पसंद की किसी भी भाषा का उपयोग करके मैपर और रेड्यूसर बनाने की अनुमति देगा लेकिन इनपुट और आउटपुट एक निश्चित प्रारूप में होना चाहिए। कई प्रयोग हैं, लेकिन मेरी राय में, प्रक्रिया नियंत्रण डिजाइन लक्ष्यों में से एक नहीं था।

[संपादित करें] शायद ZooKeeper जो आप ढूंढ रहे हैं उसके करीब है।

+0

मैं योजना बना रहा हूं। मैं अमेज़ॅन का भुगतान करने से पहले प्रक्रिया को समझना चाहता हूं। – Lostsoul

+0

अमेज़ॅन की कीमत थोड़ा उलझन में हो सकती है। मैंने छोटे मानचित्र को नौकरियों को कम किया है (छोटे डेटा सेट, कुछ नोड्स) और प्रत्येक रन $ 0.25 यूएसडी या उससे भी कम था। – Frank

0

यदि आप चाहते हैं तो आप बैच नौकरी की क्षमता जोड़ सकते हैं लेकिन इसे आपके कोडबेस में संभावना के रूप में प्रस्तुत करने की आवश्यकता है। उदाहरण के लिए, यदि आपके पास एक मैपर है जिसमें इनपुट का एक सेट होता है जिसे आप दबाव लेने के लिए एकाधिक नोड्स असाइन करना चाहते हैं। यह सब किया जा सकता है लेकिन डिफ़ॉल्ट Hadoop इंस्टॉल के साथ नहीं।

मैं वर्तमान में एक नेस्टेड मानचित्र पर काम कर रहा हूं-ढीला ढांचा जो हाडोप कोडबेस को बढ़ाता है और आपको मैपर या रेड्यूसर के इनपुट के आधार पर अधिक नोड्स फैलाने की अनुमति देता है। यदि आप रुचि रखते हैं तो मुझे एक लाइन छोड़ दो और मैं और समझाऊंगा।

साथ ही, जब यह -libjars विकल्प की बात आती है, तो यह केवल आपके द्वारा लिखे गए नौकरी द्वारा निर्देशित नौकरी के लिए काम करने वाले नोड्स के लिए काम करता है। इसलिए यदि आप 10 मैपर निर्दिष्ट करते हैं, तो -लिबर आपके कोड को कॉपी करेगा। यदि आप 10 से शुरू करना चाहते हैं, लेकिन अपना रास्ता तैयार करें, तो आपके द्वारा जोड़े गए नोड्स में कोड नहीं होगा।

इसे बाईपास करने का सबसे आसान तरीका hadoop-env.sh स्क्रिप्ट के क्लासपाथ में अपना जार जोड़ना है। वह हमेशा जब नौकरी की प्रतिलिपि शुरू करता है तो क्लस्टर जानता है कि सभी नोड्स के लिए जार।

1

मैं डैनियल के जवाब से काफी सहमत नहीं हूं। मुख्य रूप से क्योंकि यदि "नौकरी शुरू करने पर, क्लस्टर को पता चलने वाले सभी नोड्स पर जार कोड की प्रतिलिपि बनाई जाएगी" तो सत्य है, फिर भी यदि आप 100 मैपर का उपयोग करते हैं और 1000 नोड्स हैं, तो सभी नौकरियों के लिए कोड हमेशा कॉपी किया जाएगा सभी नोड्स मतलब नहीं है।

इसके बजाय क्रिस Shain के उत्तर अधिक अर्थ है कि जब भी JobScheduler JobTracker पर एक नौकरी निष्पादित करने के लिए चुनता है और फिर इस समय एक काम के लिए एक विशेष datanode द्वारा निष्पादित की जाने की पहचान करता है किसी भी तरह यह जहां codebase कॉपी करने के लिए से tasktracker बता देते हैं बनाता है।

प्रारंभ में (मैप्रेडस नौकरी शुरू होने से पहले), codebase को mapred.submit.replication पैरामीटर द्वारा परिभाषित कई स्थानों पर कॉपी किया गया था। इसलिए, टास्कट्रैक कोडबेस को कई स्थानों से कॉपी कर सकता है, जिसकी सूची जॉबट्रैकर द्वारा भेजी जा सकती है।