mapreduce的reduce输出文件进行压缩

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

猜你喜欢

转载自tydldd.iteye.com/blog/2053946