2010-08-04 10 views
7

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

जब मैं इस ऐप को कमांड लाइन (या ग्रहण या नेटबीन में) पर चलाता हूं, तो मैं अभी तक एक मानचित्र और/या एक समय में थ्रेड को कम करने के लिए इसे मनाने में सक्षम नहीं हूं। इस तथ्य को देखते हुए कि उपकरण बहुत सीपीयू गहन है यह "एकल धागा" मेरी वर्तमान बाधा है।

नेटबीन्स प्रोफाइलर में इसे चलाने पर मुझे लगता है कि ऐप विभिन्न उद्देश्यों के लिए कई धागे शुरू करता है, लेकिन एक ही पल में केवल एक ही नक्शा/कमी चल रही है।

इनपुट डेटा में कई इनपुट फाइलें होती हैं, इसलिए मानचित्र चरण के लिए एक ही समय में हैडोप को प्रति इनपुट फ़ाइल 1 थ्रेड चलाने में सक्षम होना चाहिए।

कम से कम 2 या 4 सक्रिय धागे चलने के लिए मैं क्या करूँगा (जो इस एप्लिकेशन के अधिकांश प्रोसेसिंग समय के लिए संभव होना चाहिए)?

मुझे उम्मीद है कि यह कुछ बहुत मूर्खतापूर्ण है जिसे मैंने अनदेखा कर दिया है।


मैं सिर्फ यह पाया: https://issues.apache.org/jira/browse/MAPREDUCE-1367 यह सुविधा मैं Hadoop 0.21 में लिए देख रहा था यह इसे नियंत्रित करने के ध्वज mapreduce.local.map.tasks.maximum परिचय लागू करता है।

अभी के लिए मुझे here in this question वर्णित समाधान भी मिला है।

उत्तर

5

मुझे यकीन नहीं है कि मैं सही हूं, लेकिन जब आप स्थानीय मोड में कार्य चला रहे हैं, तो आपके पास एकाधिक मैपर/रेड्यूसर नहीं हो सकते हैं।

वैसे भी, चल मानचित्रकारों की अधिकतम संख्या निर्धारित करने के लिए और reducers विन्यास विकल्प का उपयोग mapred.tasktracker.map.tasks.maximum और mapred.tasktracker.reduce.tasks.maximum डिफ़ॉल्ट उन विकल्पों 2 की तैयारी में हैं द्वारा, तो मैं सही हो सकता है।

अंत में, आप multinode क्लस्टर के लिए तैयार रहना चाहते हैं, तो पूरी तरह से वितरित तरीके से इस चल साथ सीधे जाओ, लेकिन सभी सर्वर है (namenode, datanode, tasktracker, jobtracker, ...) एक भी मशीन पर चलने

+1

धन्यवाद, आपके अवलोकन के कारण मैंने स्रोत डाउनलोड किया और इसके माध्यम से खोद दिया। मैंने पाया कि स्थानीय मोड में चलते समय org.apache.hadoop.mapred.LocalJobRunner का उपयोग वास्तव में नौकरी चलाने के लिए किया जाता है। रन() विधि क्रमशः सबकुछ करता है। बिल्कुल कोई धागा नहीं। मुझे org.apache.hadoop.mapreduce.lib.map.MultithreadedMapper एक बहुत ही अजीब विशेषता मिली: एक मैपर कार्यान्वयन जो वास्तविक हडोप ढांचे के बाहर थ्रेडिंग करता है। दस्तावेज के मुताबिक केवल उपयोगी अगर आप सीपीयू बाध्य नहीं हैं। हमारा टूल सीपीयू बाध्य है इसलिए हम इसका उपयोग नहीं कर सकते हैं। –

0

this thread on the hadoop.core-user email list के अनुसार, आप mapred.tasktracker.tasks.maximum को उन कार्यों की अधिकतम संख्या में बदलना चाहते हैं, जिन्हें आप अपनी मशीन को संभालना चाहते हैं (जो कोर की संख्या होगी)।

यह (और अन्य गुण जिन्हें आप कॉन्फ़िगर करना चाहते हैं) को the main documentation on how to setup your cluster/daemons में भी दस्तावेज किया गया है।

+2

कोई विकल्प नहीं है: 'mapred.tasktracker.tasks.maximum', मानचित्र के लिए अलग-अलग विकल्प हैं और कम करें: 'mapred.tasktracker। {Map | less} .tasks.maximum', यह आपके दूसरे लिंक के नीचे है की तैनाती। – wlk

+0

मेरी व्याख्या यह थी कि आप 'मानचित्र' या 'कम करें' या कोई भी नहीं हो सकता था। ईमेल थ्रेड 2007 से है लेकिन हैडोप के लेखक ने 'mapred.tasktracker.tasks.maximum' –

+0

का उपयोग करके उल्लेख किया है, ठीक है, यह ईमेल 2007 से है, यह संभवतः 0.16 हैडूप से पहले संस्करण की चिंता करता है, क्योंकि मैपर और रेड्यूसर के लिए अलग-अलग विकल्प पेश किए गए थे 0.16 में (और 0.16 को 2008 के आसपास कहीं भी पेश किया गया था) इस पर एक नज़र डालें: http://hadoop.apache.org/common/docs/r0.15.2/cluster_setup.html#Configuring+the+Hadoop+Demons और http://hadoop.apache.org/common/docs/r0.16.0/cluster_setup.html#Configuring+the+Hadoop+Demons – wlk

2

बस स्पष्टीकरण के लिए ... यदि हडूप स्थानीय मोड में चलता है तो आपके पास कार्य स्तर पर समानांतर निष्पादन नहीं होता है (सिवाय इसके कि आप चल रहे हैं> = हैडऑप 0.21 (MAPREDUCE-1367))। यद्यपि आप एक साथ कई नौकरियां जमा कर सकते हैं और फिर इन्हें समानांतर में निष्पादित किया जा रहा है।

सभी उन

mapred.tasktracker {मानचित्र | को कम}। .tasks।अधिकतम

गुण केवल वितरित मोड में चल रहे हैंडऑप पर लागू होते हैं!

HTH Joahnnes

+0

सही। जिस तरह से मैंने इसे दो साल पहले चलाया था (http://stackoverflow.com/questions/3546025/) केवल नौकरी और टास्कट्रैक चला रहा था। तो यह छद्म-वितरित करने के लिए स्थानीय और केवल आधा रास्ता नहीं है। यह आपके द्वारा उल्लिखित 0.21 फीचर के बिना कई सीपीयू कोर का उपयोग संभव बनाता है। –

0

आप क्या करना चाहते क्या "छद्म वितरित" मोड में Hadoop चलाया जाता है। एक मशीन, लेकिन, कार्य ट्रैकर्स और नाम नोड्स चलाना जैसे कि यह एक वास्तविक क्लस्टर था। फिर यह (संभावित रूप से) कई श्रमिकों को चलाएगा।

ध्यान दें कि यदि आपका इनपुट छोटा है तो हैडोप यह तय करेगा कि यह समांतरता के लायक नहीं है। आपको इसके डिफ़ॉल्ट विभाजन आकार को बदलकर इसे संयोजित करना पड़ सकता है।

मेरे अनुभव में, "सामान्य" हैडोप नौकरियां आई/ओ बाध्य हैं, कभी-कभी स्मृति-बाध्य, सीपीयू-बाध्य होने से पहले। इस कारण से आपको एक मशीन पर सभी कोरों का पूरी तरह से उपयोग करना असंभव हो सकता है।

+0

सीपीयू बाउंड जॉब के लिए यह प्रश्न लगभग (लगभग 2 साल पहले) था, यह एचडीएफएस के बिना कई सीपीयू कोर पर चलाना ठीक था। इसलिए "छद्म-वितरित" मोड का एक छीन प्रकार। –

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