2013-06-21 13 views
22

मेरे दूसरे प्रश्न से संबंधित के लिए लिखा है, लेकिन अलग संपीड़ित करने के लिए कैसे:स्टैंडअलोन मोड स्पार्क: चिंगारी उत्पादन HDFS

someMap.saveAsTextFile("hdfs://HOST:PORT/out") 

मैं HDFS के लिए एक RDD सहेजते हैं, तो मैं कैसे बता सकते हैं चिंगारी gzip से उत्पादन संपीड़ित करने के लिए ? Hadoop में, यह

mapred.output.compress = true 

सेट और

mapred.output.compression.codec = <<classname of compression codec>> 

मैं कैसे चिंगारी में ऐसा होगा साथ संपीड़न एल्गोरिथ्म चयन करने के लिए संभव है? क्या यह भी काम करेगा?

संपादित: का उपयोग कर चिंगारी-0.7.2

उत्तर

20

विधि saveAsTextFile उपयोग करने के लिए कोडेक वर्ग के एक अतिरिक्त वैकल्पिक पैरामीटर लेता है। तो अपने जैसे उदाहरण के लिए इस gzip उपयोग करने के लिए यह कुछ होना चाहिए:

someMap.saveAsTextFile("hdfs://HOST:PORT/out", classOf[GzipCodec]) 

अद्यतन

जब से तुम 0.7.2 का उपयोग कर रहे आप विन्यास विकल्पों के माध्यम से संपीड़न कोड बंदरगाह के लिए सक्षम हो सकता है कि आप स्टार्टअप पर सेट करें। मुझे यकीन है कि अगर यह वास्तव में काम करेंगे नहीं कर रहा हूँ, लेकिन आप इस से जाने की जरूरत है: अपने config शायद पोस्टिंग होगी,

System.setProperty("spark.hadoop.mapred.output.compress", "true") 
System.setProperty("spark.hadoop.mapred.output.compression.codec", "true") 
System.setProperty("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec") 
System.setProperty("spark.hadoop.mapred.output.compression.type", "BLOCK") 

आप इसे काम करने के लिए मिलता है: कुछ इस तरह के

conf.setCompressMapOutput(true) 
conf.set("mapred.output.compress", "true") 
conf.setMapOutputCompressorClass(c) 
conf.set("mapred.output.compression.codec", c.getCanonicalName) 
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString) 

दूसरों के लिए भी सहायक हो।

+0

चिंगारी का कौन सा संस्करण के साथ इस काम करता है? मैं चिंगारी से 0.7 का उपयोग कर रहा है। 2 और मुझे संकलन समय में एक त्रुटि मिलती है: 'त्रुटि: विधि saveAsTextFile' के लिए बहुत से तर्क। मैंने देखा कि यह [चर्चा] था [https://github.com/mesos/spark/pull/645) हालांकि। – ptikobj

+1

मुझे लगता है कि यह नवीनतम स्पार्क-0.8.0 में है। ऐसा लगता है क्योंकि ऐसा लगता है क्योंकि यह एक महत्वपूर्ण विशेषता है। – ptikobj

+0

आह, यह समझ में आता है। मैं मास्टर शाखा के साथ काम कर रहा हूं, 0.7.2 नहीं। – Noah

2

एचडीएफएस या अमेज़ॅन एस 3 निर्देशिका प्रणाली में gzipped फ़ाइलों को सहेजने का एक और तरीका saveAsHadoopFile विधि का उपयोग करना है।

someMap RDD [(कश्मीर, वी)], यदि आप someMap है के रूप में RDD [V], आप कॉल कर सकते हैं someMap.map (लाइन => (लाइन, "") saveAsHadoopFile विधि का उपयोग करने के लिए है।

import org.apache.hadoop.io.compress.GzipCodec 

someMap.saveAsHadoopFile(output_folder_path, classOf[String], classOf[String], classOf[MultipleTextOutputFormat[String, String]], classOf[GzipCodec]) 
+0

क्या इसके बजाय पैरामीटर को 'spark-defaults.xml' में समान तरीके से सेट करना संभव है, इसलिए हर नौकरी इसका उपयोग कर सकती है? मैंने सेटिंग को 'स्पार्क-डिफॉल्ट.एक्सएमएल' में दोहराने की कोशिश की लेकिन सेटिंग्स को उठाया नहीं जा रहा है। – nikk

1

नए स्पार्क रिहाई के लिए, कृपया अपने चिंगारी defaults.xml फ़ाइल में निम्न कार्य करें। (mapred derecated है)।

<property> 
    <name>mapreduce.output.fileoutputformat.compress</name> 
    <value>true</value> 
</property> 
<property> 
    <name>mapreduce.output.fileoutputformat.compress.codec</name> 
    <value>GzipCodec</value> 
</property> 
<property> 
    <name>mapreduce.output.fileoutputformat.compress.type</name> 
    <value>BLOCK</value> 
</property> 
संबंधित मुद्दे