2011-04-06 15 views
23

मेरे पास नक्शा-कम जावा प्रोग्राम है जिसमें मैं केवल मैपर आउटपुट को संपीड़ित करने की कोशिश करता हूं लेकिन रेड्यूसर आउटपुट नहीं। मैंने सोचा कि नीचे सूचीबद्ध अनुसार कॉन्फ़िगरेशन इंस्टेंस में निम्न गुणों को सेट करना संभव होगा। हालांकि, जब मैं अपना काम चलाता हूं, तो रेड्यूसर द्वारा उत्पन्न आउटपुट अभी भी संपीड़ित होता है क्योंकि उत्पन्न फ़ाइल है: part-r-00000.gz। क्या किसी ने सफलतापूर्वक मैपर डेटा को संपीड़ित किया है लेकिन reducer नहीं? क्या यह भी संभव है?हाडोप, मैपर आउटपुट को कैसे कंप्रेस करें, लेकिन रेड्यूसर आउटपुट

// कम्प्रेस नक्शाकार उत्पादन

conf.setBoolean("mapred.output.compress", true); 
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString()); 
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class); 

उत्तर

21
MR2 साथ

, अब हम

conf.set("mapreduce.map.output.compress", true) 
conf.set("mapreduce.output.fileoutputformat.compress", false) 

स्थापित करना चाहिए अधिक जानकारी के लिए देखें: http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

+0

पर लाए जाते हैं यदि किसी को दिलचस्पी है कि यह एवरो के लिए कैसे काम करता है, क्योंकि एवरो केवल स्नैपी और डिफ्लेट का समर्थन करता है, तो यह कॉन्फ़िगरेशन सबसे अच्छा है। अंतिम कम फ़ाइल नाम नहीं बदले जाएंगे, हालांकि आप देखेंगे कि आंतरिक ब्लॉक स्तर पर संपीड़न के कारण फ़ाइल आकार बदलते हैं। यहां अधिक जानकारी: http://www.quora.com/Can-avro-data-files-be-lzop-compressed-in-Hadoop –

+0

क्या आप ईएमआर में चरणों को जोड़ने के दौरान इन सेटिंग्स को सेट कर रहे हैं? –

11

"आउटपुट संपीड़न" अपने अंतिम आउटपुट सेक होगा।

conf.set("mapred.compress.map.output", "true") 
    conf.set("mapred.output.compression.type", "BLOCK"); 
    conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec"); 
+0

gzip का प्रयोग के रूप में कंप्रेसर इस तरह के एक अच्छा विचार नहीं है। मुख्य समस्या यह है कि यह विभाजित नहीं है। –

+6

क्यों? मैंने सोचा कि मैपर आउटपुट विभाजित नहीं होता है, केवल अगर reducer या पहचान reducer का उपयोग कर आउटपुट विभाजित हो सकता है। – Marcin

+0

मेरी समझ इनपुट डेटा को संपीड़ित करने के लिए जीजेआईपी का उपयोग कर रही है एक अच्छा विचार नहीं है। और कारण यह है कि यह विभाजित नहीं है। मानचित्र आउटपुट के लिए gzip का उपयोग करने में कोई समस्या नहीं है। – root1982

2
  1. आप सही पर सेट करने के लिए "mapred.compress.map.output" की जरूरत है: नक्शे-आउटपुट सेक करने के लिए केवल, कुछ इस तरह का उपयोग करें।
  2. वैकल्पिक रूप से आप "mapred.map.output.compression.codec" सेट करके अपना संपीड़न कोडेक चुन सकते हैं। नोट 1: मानचित्रित आउटपुट संपीड़न कभी भी ब्लॉक नहीं होना चाहिए। विस्तार के लिए निम्नलिखित जीआईआरए देखें: https://issues.apache.org/jira/browse/HADOOP-1194 नोट 2: जीजेआईपी और बीजेड 2 सीपीयू गहन हैं। यदि आपके पास धीमी नेटवर्क है और जीजेआईपी या बीजेड 2 बेहतर संपीड़न अनुपात देता है, तो यह CPU चक्रों के खर्च को उचित ठहरा सकता है। अन्यथा, एलजेडओ या स्नैपी कोडेक पर विचार करें।
    नोट 3: यदि आप मानचित्र आउटपुट संपीड़न का उपयोग करना चाहते हैं, तो मूल कोडेक स्थापित करें पर विचार करें जिसे जेएनआई के माध्यम से बुलाया जाता है और आपको बेहतर प्रदर्शन देता है।
+0

पर डिफ़ॉल्ट है, इसके अलावा, क्या हम केवल मैपर मानों को संपीड़ित कर सकते हैं, चाबियाँ नहीं? –

+0

यह एक विकल्प नहीं है। – root1982

52

mapred.compress.map.output: नक्शाकार और कम करने के बीच डेटा के संपीड़न है। यदि आप स्नैपी कोडेक का उपयोग करते हैं तो यह संभवतः पढ़ने की गति को पढ़ने और नेटवर्क ओवरहेड को कम करने में वृद्धि करेगा। यहां थूकने की चिंता मत करो। ये फ़ाइलें hdfs में संग्रहीत नहीं हैं। वे अस्थायी फ़ाइलें हैं जो केवल मानचित्र के लिए नौकरी कम करती हैं।

mapred.map.output.compression.codec: मैं तेज़

mapred.output.compress का प्रयोग करेंगे: इस बूलियन ध्वज परिभाषित करेगा पूरे नक्शा/काम कम हो जाएगा उत्पादन संकुचित डेटा है। मैं हमेशा इसे सच में भी सेट करता हूं। तेज़ी से पढ़ने/लिखने की गति और कम डिस्क का उपयोग किया जाता है।

mapred.output.compression.type: मैं ब्लॉक का उपयोग करता हूं। यह संपीड़न को सभी संपीड़न प्रारूपों (gzip, snappy, और bzip2) के लिए भी विभाजित कर देगा, बस सुनिश्चित करें कि आप अनुक्रम, आरसीफ़ाइल, या एवरो जैसे एक स्प्लिटेबल फ़ाइल प्रारूप का उपयोग कर रहे हैं।

mapred.output.compression.codec: यह मानचित्र के लिए संपीड़न कोडेक/नौकरी को कम करता है। मैं ज्यादातर तीनों में से एक का उपयोग करता हूं: स्नैपी (सबसे तेज़ आर/डब्ल्यू 2 एक्स -3 एक्स संपीड़न), जीजीआईपी (सामान्य आर फास्ट डब्ल्यू 5 एक्स -8 एक्स संपीड़न), बीजीआईपी 2 (धीमी आर/डब्ल्यू 8x-12x संपीड़न)

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

+5

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

+1

हडूप 2. * संस्करण अब मैड्रिडस का उपयोग करता है। *। *, – fengyun

+0

से नीचे मेरा जवाब पढ़ें क्या आप कृपया विस्तार कर सकते हैं "उसकी इच्छा संपीड़न को सभी संपीड़न प्रारूपों के लिए भी विभाजित कर सकती है"? मेरे अनुभव में जीजी वास्तव में विभाजित नहीं है। आपको कई ब्लॉकों में संग्रहीत फाइलें मिलती हैं, लेकिन जब मैपर उन्हें पढ़ते हैं, तो प्रति फ़ाइल केवल 1 मैपर उत्पन्न होती है। इसका मतलब है कि पहले ब्लॉक को छोड़कर सभी ब्लॉक नेटवर्क – markob

1

यदि आप हैडोप के लिए मैपआर के वितरण का उपयोग करते हैं, तो आप कोडेक्स के साथ सभी फ़ोल्डर के बिना संपीड़न के लाभ प्राप्त कर सकते हैं।

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

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