【问题标题】:How to automatically compress files in Hadoop?如何在Hadoop中自动压缩文件?
【发布时间】:2016-08-03 18:02:04
【问题描述】:

我对 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 中出现新文件时,它应该自动压缩。

谢谢 虚拟机

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    我建议您编写 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 中数据压缩的好文章,希望对您有所帮助:

    http://comphadoop.weebly.com/

    【讨论】:

    • 谢谢 Alex 对我有意义,但请让我更清楚地了解我们为什么需要或压缩 core-site.xml 或 maperd-site.xml 文件中的属性的目的?
    • @user3332404 我提供的示例是为单次 map-reduce 作业输出数据应用压缩在 mapred-site.xml 中设置此属性将自动将其应用于所有 map-reduce 作业输出数据,这样您就不必在每次运行作业时都设置此参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2015-11-26
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多