sch*_*mmd 14 compression hadoop
我最近在Hadoop中设置了LZO压缩.在HDFS中压缩文件的最简单方法是什么?我想压缩文件,然后删除原始文件.我应该使用IdentityMapper和使用LZO压缩的IdentityReducer创建MR作业吗?
Jef*_* Wu 21
对我来说,编写Hadoop Streaming作业来压缩文件的开销较低.
这是我运行的命令:
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=org.apache.hadoop.io.compress.GzipCodec \
  -Dmapred.reduce.tasks=0 \
  -input <input-path> \
  -output $OUTPUT \
  -mapper "cut -f 2"
Run Code Online (Sandbox Code Playgroud)
我通常还会将输出存储在临时文件夹中以防出现问题:
OUTPUT=/tmp/hdfs-gzip-`basename $1`-$RANDOM
Run Code Online (Sandbox Code Playgroud)
另外一点,我没有在流媒体工作中指定减速器,但你当然可以.它将强制对所有行进行排序,这对于大文件可能需要很长时间.可能有一种方法可以通过覆盖分区来解决这个问题,但我并没有费心去解决这个问题.不幸的是,您可能最终得到许多不能有效利用HDFS块的小文件.这是研究Hadoop Archives的一个原因
我建议你写一个MapReduce作业,就像你说的那样,只使用Identity mapper.在您使用它时,您应该考虑将数据写入序列文件以提高性能加载.您还可以在块级和记录级压缩中存储序列文件.你应该看看什么最适合你,因为两者都针对不同类型的记录进行了优化.
小智 5
来自 Jeff Wu 的流命令以及压缩文件的串联将提供单个压缩文件。当一个非 java 映射器被传递给流作业并且输入格式是文本流时,只输出值而不是键。
hadoop jar contrib/streaming/hadoop-streaming-1.0.3.jar \
            -Dmapred.reduce.tasks=0 \
            -Dmapred.output.compress=true \
            -Dmapred.compress.map.output=true \
            -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
            -input filename \
            -output /filename \
            -mapper /bin/cat \
            -inputformat org.apache.hadoop.mapred.TextInputFormat \
            -outputformat org.apache.hadoop.mapred.TextOutputFormat
hadoop fs -cat /path/part* | hadoop fs -put - /path/compressed.gz
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           42328 次  |  
        
|   最近记录:  |