我对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
答案 0 :(得分:0)
我建议您编写map-reduce作业来压缩hdfs中的数据。我不知道是否有办法对hadoop put操作进行自动压缩,但假设它不存在。一种选择是放置已经压缩的文件:
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流式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上有一篇关于数据压缩的好文章,希望你能发现它非常有用: