转:http://tydldd.iteye.com/blog/2053946
hadoop对每个压缩格式的支持,详细见下表:
压缩格式 | 工具 | 算法 | 文件扩展名 | 多文件 | 可分割性 |
DEFLATE | 无 | DEFLATE | .deflate | 不 | 不 |
gzip | gzip | DEFLATE | .gz | 不 | 不 |
ZIP | zip | DEFLATE | .zip | 是 | 是,在文件范围内 |
bzip2 | bzip2 | bzip2 | .bz2 | 不 | 是 |
LZO | lzop | LZO | .lzo | 不 | 否 |
hadoop下各种压缩算法的压缩比,压缩时间,解压时间见下表:
压缩算法 | 原始文件大小 | 压缩后的文件大小 | 压缩速度 | 解压缩速度 |
gzip | 8.3GB | 1.8GB | 17.5MB/s | 58MB/s |
bzip2 | 8.3GB | 1.1GB | 2.4MB/s | 9.5MB/s |
LZO-bset | 8.3GB | 2GB | 4MB/s | 60.6MB/s |
LZO | 8.3GB | 2.9GB | 49.3MB/S | 74.6MB/s |
现在最常用的压缩方式是gzip和lzo。两者相比:gzip压缩想过更好能达到原大小的25%,LZO则能到30%-40%。lzo的压缩和解压速度更快,lzo的解压速度大概是gzip的3倍左右
对输出文件进行压缩很简单,只需要 1、指定作业使用压缩 2、指定压缩格式
- Configuration conf = new Configuration();
- //map任务中间输出使用gzip压缩-------不能用
- // conf.setBoolean("mapred.compress.map.output", true);
- // conf.setClass("mapred.map.output.compression.codec",GzipCodec.class, CompressionCodec.class);
- Job job = new Job(conf, "wordcount Job");
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(IntWritable.class);
- job.setMapperClass(mapperString.class);
- // job.setCombinerClass(reduceStatistics.class);
- job.setReducerClass(reduceStatistics.class);
- FileInputFormat.addInputPath(job, new Path(in));
- FileOutputFormat.setOutputPath(job, new Path(out));
- //将reduce输出文件压缩
- FileOutputFormat.setCompressOutput(job, true); //job使用压缩
- FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class); //设置压缩格式
- job.waitForCompletion(true);
执行结果:
- nange@ubuntu:~/work/test/word$ hadoop fs -ls /hdfs/test/wordcount/out/
- Found 6 items
- -rw-r--r-- 3 nange supergroup 0 2014-04-24 09:57 /hdfs/test/wordcount/out/_SUCCESS
- drwxr-xr-x - nange supergroup 0 2014-04-24 09:57 /hdfs/test/wordcount/out/hadoop
- -rw-r--r-- 3 nange supergroup 28 2014-04-24 09:57 /hdfs/test/wordcount/out/hello-r-00000.gz
- -rw-r--r-- 3 nange supergroup 29 2014-04-24 09:57 /hdfs/test/wordcount/out/other-r-00000.gz
- -rw-r--r-- 3 nange supergroup 20 2014-04-24 09:57 /hdfs/test/wordcount/out/part-r-00000.gz
- -rw-r--r-- 3 nange supergroup 28 2014-04-24 09:57 /hdfs/test/wordcount/out/world-r-00000.gz
查看gzip文件
- nange@ubuntu:~/work/test/word$ hadoop fs -text /hdfs/test/wordcount/out/hadoop/-r-00000.gz
- hadoop 1