2012-11-19 11 views
6

में एचडीएफएस में एक फ़ाइल को लिखना मैं हाडोप में आई/ओ गतिविधि का परीक्षण करने के लिए एक डिस्क गहन हडोप एप्लिकेशन की तलाश में था, लेकिन मुझे ऐसा कोई एप्लिकेशन नहीं मिला जो ऊपर डिस्क उपयोग को ऊपर रखता है, 50% या कुछ कहता है ऐसा एप्लिकेशन जो वास्तव में डिस्क व्यस्त रहता है। मैंने यादृच्छिक लेखक की कोशिश की, लेकिन आश्चर्य की बात यह है कि डिस्क I/o गहन नहीं है।हडोप

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

यहाँ मेरी नमूना कोड खंड है कि मैं एक फ़ाइल

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(conf); 
Path outFile; 
while (itr.hasMoreTokens()) { 
    word.set(itr.nextToken()); 
    context.write(word, one); 
    outFile = new Path("./dummy"+ context.getTaskAttemptID()); 
    FSDataOutputStream out = fs.create(outFile); 

    out.writeUTF("helloworld"); 
    out.close(); 
    fs.delete(outFile); 
    } 
+0

आई/ओ बेंचमार्किंग के लिए आप टेस्टडीएफएसआईओ पर भी एक नज़र डाल सकते हैं: http://answers.oreilly.com/topic/460-how-to-benchmark-a-hadoop-cluster/ –

+0

@LorandBendig मैंने किया, टेस्ट डीएफएसआईओ के लिए उच्चतम डिस्क उपयोग जो मैंने 14 नोड्स के क्लस्टर के लिए पाया है, केवल 2.4% है और औसत 0.07% है। मैं _iostat_ कमांड से डिस्क उपयोग को माप रहा हूं, नौकरी लगभग 300 के लिए दौड़ गई। क्या वास्तव में कुछ मूर्खतापूर्ण है जो मैं कर रहा हूं और इसके बारे में नहीं जानता? –

+0

आप पैरामीटर (फ़ाइलों, आकार के एनआर) के साथ खेल सकते हैं लेकिन मुझे लगता है कि आप पहले ही कर चुके हैं। ऐसे कई परीक्षण हैं जिन्हें आप यहां बहुत अच्छी तरह से वर्णित कर सकते हैं: http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort -testdfsio-nnbench-mrbench/ –

उत्तर

0

ठीक से एक कॉल में डेटा के बड़े हिस्से लिखें। मैं पहले जांच नहीं करने के लिए वास्तव में बेवकूफ होना चाहिए। वास्तविक समस्या यह थी कि मेरे सभी डेटा नोड वास्तव में नहीं चल रहे थे। मैंने नामनोड को दोबारा सुधार दिया और सबकुछ वापस आ गया, मुझे 15-20% का उपयोग मिल रहा था जो डब्ल्यूसी के लिए बुरा नहीं है। मैं इसे टेस्ट डीएफएसआईओ के लिए चलाऊंगा और देख सकता हूं कि क्या मैं डिस्क का और भी उपयोग कर सकता हूं।

1

मुझे लगता है कि में WordCount.java फ़ाइल में लिखा था बना सकते हैं और UTF स्ट्रिंग लिखने के लिए है कि किसी भी व्यवस्था है जिसके प्रत्येक पंक्ति में सेल प्रति जावा वस्तुओं बनाता है, और डिस्क पर सहेजने से पहले जावा ऑब्जेक्ट्स के किसी भी कर क्रमबद्धता को चलाने के लिए आईओ का उपयोग करने का थोड़ा मौका नहीं है।
मेरे अनुभव में क्रमशः कई एमबी प्रति सेकंड या कुछ और की गति में काम कर रहा है, लेकिन प्रति सेकंड 100 एमबी नहीं है।
तो आउटपुट पथ पर हडूप परतों से बचने के लिए आपने काफी सही किया है। अब मान लें कि एचडीएफएस कैसे काम करता है। डेटा स्थानीय डिस्कनोड के माध्यम से स्थानीय डिस्क पर लिखा जाता है, और उसके बाद नेटवर्क में अन्य नोड्स के साथ सिंक्रनाइज़ किया जाता है, जो आपके प्रतिकृति कारक के आधार पर होता है। इस मामले में आप एचडीएफएस में अपने डेटा बैंडविड्थ में अधिक डेटा नहीं लिख सकते हैं। यदि आपका क्लस्टर अपेक्षाकृत छोटी चीजें लायक है। 3 नोड क्लस्टर और ट्रिपल प्रतिकृति के लिए आप सभी नोड्स पर सभी डेटा पथित करेंगे ताकि पूरे क्लस्टर एचडीएफएस लिखने बैंडविड्थ लगभग 1 जीबीआईटी हो - यदि आपके पास ऐसा नेटवर्क है।
तो, मैं सुझाव दूंगा:
ए) प्रतिकृति कारक को 1 तक घटाएं, इस प्रकार नेटवर्क द्वारा बाध्य होना बंद करें।
बी) मैपर

+0

मैंने प्रतिकृति कारक को 1 में बदल दिया और क्रमशः ब्लॉक आकार को 1 केबी और 1 एमबी में बदल दिया। मेरे अवलोकन यह है कि नक्शा-कम धीरे-धीरे चलता है और आईओ केवल मास्टर नोड में उच्च होता है। मैंने मैपर में एक बार लिखने की भी कोशिश की, उपर्युक्त कोड के विपरीत जहां मैं फ़ाइल लिखता हूं जब हर शब्द मिलता है .. फिर भी, व्यवहार वही बना रहता है। –

+0

कितने मैपर एक साथ चल रहे हैं? और आपके द्वारा देखे जाने वाले प्रति नोड डिस्क बैंडविड्थ क्या है? –

+0

मानचित्र कार्यों को लॉन्च किया गया = 3, लॉन्च किए गए कार्यों को कम करें = 1, मानचित्रित।tasktracker.map.tasks.maximum = 2, mapred.tasktracker.reduce.tasks.maximum = 2। 3 नोड्स पर डिस्क उपयोग लगभग 0 है और मास्टर नोड पर यह 100% है। –

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