2012-04-11 5 views
6

मैंने जीसी ओवरहेड सीमा पार होने के कारण मरने वाले हडोप डाटानोड प्रक्रियाओं से संबंधित अधिक जानकारी खोजी है और नहीं, इसलिए मैंने सोचा कि मैं एक प्रश्न पोस्ट करूंगा।"जीसी ओवरहेड सीमा पार हो गई" हैडोप .20 डेटानोड

हम एक परीक्षण चला रहे हैं जहां हमें यह पुष्टि करने की आवश्यकता है कि हमारे हैडोप क्लस्टर पर ~ 3 मिलियन फ़ाइलों को संग्रहीत किया जा सकता है (वर्तमान में एक 4 नोड क्लस्टर)। हम 64 बिट जेवीएम का उपयोग कर रहे हैं और हमने नामनोड को 8 जी आवंटित किया है। हालांकि, जैसा कि मेरा टेस्ट प्रोग्राम डीएफएस को और फाइलें लिखता है, डेटनोड इस त्रुटि से मरना शुरू कर देते हैं: थ्रेड में अपवाद "डेटा नोड: [/ var/hadoop/data/hadoop/data]" java.lang.OutOfMemoryError: जीसी ओवरहेड सीमा

मैंने कुछ विकल्पों (समांतर जीसी?) के बारे में कुछ पोस्ट देखी हैं, मुझे लगता है कि हैडूप-env.sh में सेट किया जा सकता है लेकिन मुझे वाक्यविन्यास का भी यकीन नहीं है और मैं एक नौसिखिया हूं, इसलिए मैं काफी नहीं किया कि यह कैसे किया जाता है। यहां किसी भी मदद के लिए धन्यवाद!

+0

लोगों के लिए बस यहां एक अपडेट: डीएफएस में @ 1.5 मिलियन फाइलें, जब मेरा 64 बिट जेवीएम 1 जी (डिफ़ॉल्ट) था तो डेटा नोड्स इस त्रुटि से मरना शुरू कर दिया। जब मैंने इसे 2 जी तक बढ़ा दिया, तब तक यह दूर चला गया जब तक कि मुझे लगभग 3 मिलियन फाइलें नहीं मिलीं। मैं सोच रहा हूं कि इस तरह की मेमोरी ब्लोट एक ज्ञात समस्या है या नहीं और यदि हां, तो मैं इसे ठीक करने की क्या अन्य सिफारिशें कर सकता हूं? – hatrickpatrick

+0

जैसे तेजस पाटिल ने उल्लेख किया, डिफ़ॉल्ट ब्लॉक आकार 64 एमबी है। हर बार जब भी यह चलता है, प्रत्येक फ़ाइल के लिए हैडोप मेटाडेटा लोड करता है। आपके पास जितनी अधिक फ़ाइलें हैं, उतनी ही मेमोरी होगी। यदि ये फ़ाइलें डिफ़ॉल्ट ब्लॉक आकार से बहुत छोटी हैं और आपके पास ऐसा करने का विकल्प है, तो फ़ाइलों को एचडीएफएस में स्टोर करने के लिए बड़ी फ़ाइलों में गठबंधन करने का प्रयास करें। बस एक विचार :) – sufinawaz

उत्तर

7

इस का उपयोग करके datanode के लिए स्मृति को बढ़ाने के लिए प्रयास करें।

आप इसे $HADOOP_CONF_DIR/hadoop-env.sh फ़ाइल में शुरुआत में भी पेस्ट कर सकते हैं।

+1

यह मूल रूप से हल किया गया, लेकिन मैंने यह भी सीखा है कि जब आप एक छोटे समूह पर बहुत सारी फाइलें संग्रहीत कर रहे हैं, तो डेटा नोड का उपयोग तेज़ी से चढ़ता है क्योंकि सीमित स्थान प्रतिकृतियां हो सकती हैं। अगर हम नोड्स जोड़ते हैं, तो डेटा नोड मेमोरी जल्दी से चढ़ाई नहीं करनी चाहिए (इसलिए मैं सुनता हूं!)। – hatrickpatrick

+1

@hatrickpatrick HDFS फ़ाइल संग्रहण के लिए 64 एमबी ब्लॉक का उपयोग करता है ... यदि फ़ाइलें छोटी हैं, तो बहुत सारी मेमोरी बर्बाद हो जाएगी और यहां तक ​​कि नामनोड को भी ट्रैक रखना होगा। कुछ छोटी फाइलें होने से कुछ बड़ी फाइलें बेहतर हैं। –

-3

जीसी ओवरहेड सीमा इंगित करती है कि आपका (छोटा) ढेर भरा हुआ है।

यह अक्सर होता है जब आप बहुत सारे डेटा को संसाधित करते हैं तो मैपरेडस ऑपरेशंस में अक्सर होता है। इस प्रयास करें:

< संपत्ति>

< नाम> mapred.child.java.opts </name>

< मूल्य> -Xmx1024m -XX: -UseGCOverheadLimit </मूल्य>

</संपत्ति>

इसके अलावा, इन निम्न चीजों को आजमाएं:

उपयोग समेलक, reducers भी सूची नक्शे

उसी समय की संख्या के एक छोटे से अधिक से अधिक का नहीं मिलना चाहिए, तो आप OOME से हीप डंप पैदा करते हैं और YourKit साथ विश्लेषण कर सकते हैं, आदि ए डी एन यह

का विश्लेषण यह 10GB करने के लिए ... आप अपने जरूरत के अनुसार बढ़ा सकते हैं ढेर सेट हो जाएगा (Hadoop काम करने के लिए इस के लिए आवश्यक पुनः आरंभ)

export HADOOP_DATANODE_OPTS="-Xmx10g" 

:

+2

यह सिर्फ गलत है। –

+0

@ थॉमसजंगब्लूट +1। mapred.child.java.opts को हडूप नौकरियों के लिए नियंत्रण ढेर का उपयोग किया जा सकता है और डेटानोड नहीं। –

+1

ठीक है, मैंने इसे चेक नहीं किया है, लेकिन वास्तव में उसकी समस्या दो प्रकार की है: (1) डेटा नोड्स मेमोरी सीमा (2) चरणों को सॉर्ट करने आदि के बीच में। तो, मेरा मुद्दा यह है कि हम डेटा नोड ढेर आकार को अंधाधुंध नहीं बढ़ा सकते टी 0 10 जीबी, 20 जीबी की तरह, अगर हम पैरामीटर (जैसा कि ऊपर निर्दिष्ट है) के साथ ट्यून कर सकते हैं और combiners का उपयोग कर सकते हैं, मुझे लगता है कि समाधान अच्छा होगा। –

0

यदि आप नक्शा चला रहे हैं तो कमांड लाइन से नौकरी कम करें, तो आप -D 'mapreduce.map.java.opts=-Xmx1024m' और/या -D 'mapreduce.reduce.java.opts = -Xmx1024m' पैरामीटर का उपयोग करके ढेर बढ़ा सकते हैं। उदाहरण:

hadoop --config /etc/hadoop/conf jar /usr/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf /etc/hbase/conf/hbase-site.xml -D 'mapreduce.map.java.opts=-Xmx1024m' --hbase-indexer-file $HOME/morphline-hbase-mapper.xml --zk-host 127.0.0.1/solr --collection hbase-collection1 --go-live --log4j /home/cloudera/morphlines/log4j.properties 

ध्यान दें कि कुछ क्लाउडेरा दस्तावेज में, वे अभी भी पुराने मानकों mapred.child.java.opts, mapred.map.child.java.opts और mapred.reduce.child.java.opts का उपयोग करें। ये पैरामीटर अब हडोप 2 के लिए काम नहीं करते हैं (What is the relation between 'mapreduce.map.memory.mb' and 'mapred.map.child.java.opts' in Apache Hadoop YARN? देखें)।

0

यह मेरे लिए हल हल मुद्दा।"- Xmx10g" Hadoop जार "your.jar" "source.dir" Hadoop streaming "GC overhead limit exceeded"

तो, कुंजी "प्रारंभ में लगा है कि वातावरण चर" के लिए (1 बार इस linux कमांड वाक्य रचना देखा :))

HADOOP_CLIENT_OPTS = है "target.dir"

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