2010-08-01 11 views
14

मैं 1,5 टीबी डेटा से अधिक हडोप नौकरी चला रहा हूं जिसमें बहुत पैटर्न मिलान हो रहा है। मेरे पास 16 जीबी रैम के साथ कई मशीनें हैं, और इस डेटा के साथ मैं हमेशा OutOfMemoryException प्राप्त करता हूं (मैं हाइव का उपयोग कर रहा हूं)।Hadoop चलाते समय OutOfMemoryException से कैसे बचें?

मैं जानना चाहता हूं कि HADOOP_HEAPSIZE फ़ाइल hadoop-env.sh में विकल्प को कैसे सेट करें, तो मेरा काम असफल नहीं होगा। क्या यह संभव है, इस विकल्प को सेट करने के लिए मेरी नौकरियां असफल नहीं होंगी?

जब मैं HADOOP_HEAPSIZE से 1,5 जीबी सेट करता हूं और क्वेरी से मिलान पैटर्न के आधे हिस्से को हटा देता हूं, तो नौकरी सफलतापूर्वक चलती है। तो यह विकल्प क्या है, अगर यह नौकरी विफलताओं से बचने में मदद नहीं करता है?

मुझे इष्टतम सेटअप के साथ और अधिक प्रयोग करने का मौका है, लेकिन चूंकि उन नौकरियों को चलाने के लिए 10 घंटे लगते हैं, मैं आपकी सलाह मांग रहा हूं।

+0

आपको क्या लगता है 'HADOOP_HEAPSIZE' * मदद नहीं करता है * विफलता से बचने के? आपके अनुभव से लगता है कि यह करता है। उन कारणों के लिए जिन्हें केवल आपके डेटा/नौकरी की जांच करने के लिए जाना जा सकता है, आपकी स्थिति कम से कम इस बड़े आकार के ढेर आकार के लिए कहती है। क्या आप अपनी नौकरी को दोबारा कर सकते हैं ताकि उसे इतनी बड़ी ढेर की आवश्यकता न हो? –

+0

मैंने अपना काम संशोधित किया है, इसलिए यह इतनी बड़ी ढेर का उपयोग नहीं करता है, लेकिन इस समय मैंने 'HADOOP_HEAPSIZE' बदल दिया है। और मुझे इस शगने का असली नतीजा नहीं दिख रहा है, मेरा मतलब है: क्यों ढेर को छोटे से सेट करें: राशि_of_my_RAM/number_of_mappers_or_reducers? – wlk

उत्तर

13

क्या नौकरी विफल रही है या आपका सर्वर क्रैश हो रहा है? यदि आपकी नौकरी नोड्स पर OutOfMemmory की वजह से विफल हो रही है, तो आप अपने अधिकतम मानचित्र और reducers की संख्या और प्रत्येक के लिए JVM ऑप्ट्स को ट्वीक कर सकते हैं ताकि ऐसा कभी नहीं होगा। mapred.child.java.opts (डिफ़ॉल्ट 200Xmx है) आमतौर पर आपके डेटा नोड्स विशिष्ट हार्डवेयर के आधार पर बढ़ाना होगा।

http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/

मैक्स कार्यों Namenode पर सेटअप या अधिरोहित जा सकता है (और अंतिम सेट) विभिन्न हार्डवेयर कॉन्फ़िगरेशन हो सकता है डेटा नोड्स पर। मैपर्स और रेड्यूसर दोनों के लिए अधिकतम कार्य सेटअप हैं। इसकी गणना करने के लिए यह सीपीयू (कोर) और आपके पास मौजूद रैम की मात्रा और mapred.child.java.opts (डिफ़ॉल्ट 200 है) में जेवीएम अधिकतम सेटअप पर आधारित है। डाटानोड और टास्कट्रैक प्रत्येक को 1 जीबी तक सेट किया जाता है, इसलिए 8 जीबी मशीन के लिए mapred.tasktracker.map.tasks.maximum 7 पर सेट किया जा सकता है और mapred.tasktracker.reduce.tasks.maximum mapred.child.java के साथ 7 पर सेट हो सकता है .opts -400Xmx पर सेट (8 कोर मानते हैं)। कृपया ध्यान दें कि ये कार्य अधिकतम आपके सीपीयू द्वारा किए गए हैं यदि आपके पास केवल 1 सीपीयू 1 कोर है तो आपके डेटा नोड के लिए नया हार्डवेयर प्राप्त करने या मास्क कार्यों को 1 पर सेट करने का समय है। यदि आपके पास 4 कोर के साथ 1 सीपीयू है तो 3 को मानचित्र सेट करना और 3 को कम करना अच्छा होगा (डेमॉन के लिए 1 कोर सहेजना)।

डिफ़ॉल्ट रूप से केवल एक reducer है और आपको mapred.reduce.tasks को एक से अधिक होने के लिए कॉन्फ़िगर करने की आवश्यकता है। यह मान डेटा नोड्स की संख्या प्रति नोड समय के अधिकतम कार्यों की संख्या .95 और 1.75 गुना के बीच कहीं होना चाहिए। तो यदि आपके पास 3 डेटा नोड्स हैं और यह 7 के अधिकतम कार्यों को सेटअप करता है तो इसे 25 और 36 के बीच कॉन्फ़िगर करें।

यदि आपका सर्वर OutOfMemory समस्याओं से क्रैश हो रहा है तो वह है जहां HADOOP_HEAPSIZE प्रक्रियाओं के ढेर के लिए आता है (नहीं कार्य का निष्पादन)।

आखिरकार, यदि आपका काम इतना लंबा ले रहा है तो आप यह देखने के लिए जांच सकते हैं कि आपके पास एक और अच्छा कॉन्फ़िगरेशन अतिरिक्त है mapred.compress.map.output। इस मान को सही पर सेट करना चाहिए (कंप्रेसर बनाम ट्रांसफर करने के समय के बीच संतुलन) बड़े डेटा सेट के साथ काम करते समय विशेष रूप से रेड्यूकर्स प्रतिलिपि को गति दें। अक्सर नौकरियों समय लेने के लिए है, लेकिन वहाँ भी विकल्प गति चीजों को मदद करने के लिए बदलाव करने हैं = 8 ^)