如何在hadoop中自动压缩文件?

tzdcorbm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我对hadoop完全陌生,我想压缩一个大文件并将其放在hdfs中。到目前为止,这就是我所做的1)安装单节点群集2)我的core-site.xml是这样的

<configuration>
<property> <name>fs.defaultFS</name> 
<value>hdfs://localhost:9000</value> 
</property> 
<property> <name>io.compression.codecs</name>  
<value>com.hadoop.compression.lzo.LzoCodec</value> 
</property> 
</configuration>

现在,当我使用下面的命令将本地2gb文件处理到hdfs中时,我仍然看到hdfs中的大小相同。

hadoop fs -put 06_27_06_2016_tcp-leef.log-online /user/hduser/test/

我不知道我在这里遗漏了什么,是否有任何其他属性,我需要在hadoop环境中启用,或者我需要为此编写map reduce程序?所以要求每当一个新文件在hdfs中出现时,它应该自动压缩。
谢谢,vg

neekobn8

neekobn81#

我建议您编写map reduce job来压缩hdfs中的数据。我不知道是否有一种方法可以对hadoopput操作进行自动压缩,但假设它不存在。一种方法是将已压缩的文件:

gzip 06_27_06_2016_tcp-leef.log-online
hdfs dfs -put 06_27_06_2016_tcp-leef.log-online.gz /user/hduser/test/

另一种方法是在mapreduce作业中压缩它。作为一个选项,您可以使用hadoop streaming jar在hdfs中压缩文件:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \
-Dmapred.output.compress=true \
-Dmapred.compress.map.output=true \
-Dmapred.output.compression.codec=com.hadoop.compression.lzo.LzoCodec \
-Dmapred.reduce.tasks=0 \
-input <input-path> \
-output $OUTPUT \

有一篇关于hadoop中数据压缩的好文章,希望您能发现它非常有用:
http://comphadoop.weebly.com/

相关问题