hadoop深入研究:(九)——mapreduce中的压缩
来源:互联网 发布:apache ftp http访问 编辑:程序博客网 时间:2024/05/26 17:45
转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/9187721
作为输入
当压缩文件做为mapreduce的输入时,mapreduce将自动通过扩展名找到相应的codec对其解压。
作为输出
当mapreduce的输出文件需要压缩时,可以更改mapred.output.compress为true,mapped.output.compression.codec为想要使用的codec的类名就
可以了,当然你可以在代码中指定,通过调用FileOutputFormat的静态方法去设置这两个属性,我们来看代码:
package com.sweetop.styhadoop;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.io.compress.GzipCodec;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/** * Created with IntelliJ IDEA. * User: lastsweetop * Date: 13-6-27 * Time: 下午7:48 * To change this template use File | Settings | File Templates. */public class MaxTemperatureWithCompression { public static void main(String[] args) throws Exception { if (args.length!=2){ System.out.println("Usage: MaxTemperature <input path> <out path>"); System.exit(-1); } Job job=new Job(); job.setJarByClass(MaxTemperature.class); job.setJobName("Max Temperature"); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setMapperClass(MaxTemperatrueMapper.class); job.setCombinerClass(MaxTemperatureReducer.class); job.setReducerClass(MaxTemperatureReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class); System.exit(job.waitForCompletion(true)?0:1); }}输入也是一个压缩文件
~/hadoop/bin/hadoop com.sweetop.styhadoop.MaxTemperatureWithCompression input/data.gz output/
输出的每一个part都会被压缩,我们这里只有一个part,看下压缩了的输出
[hadoop@namenode test]$hadoop fs -get output/part-r-00000.gz .[hadoop@namenode test]$ls1901 1902 ch2 ch3 ch4 data.gz news.gz news.txt part-r-00000.gz[hadoop@namenode test]$gunzip -c part-r-00000.gz 19013171902244如果你要将序列文件做为输出,你需要设置mapred.output.compression.type属性来指定压缩类型,默认是RECORD类型,它会按单个的record压缩,如果指定为BLOCK类型,它将一组record压缩,压缩效果自然是BLOCK好。
当然代码里也可以设置,你只需调用SequenceFileOutputFormat的setOutputCompressionType方法进行设置。
SequenceFileOutputFormat.setOutputCompressionType(job, SequenceFile.CompressionType.BLOCK);如果你用Tool接口来跑mapreduce的话,可以在命令行设置这些参数,明显比硬编码好很多
压缩map输出
即使你的mapreduce的输入输出都是未压缩的文件,你仍可以对map任务的中间输出作压缩,因为它要写在硬盘并且通过网络传输到reduce节点,对其压
缩可以提高很多性能,这些工作也是只要设置两个属性即可,我们看下代码里怎么设置:
Configuration conf = new Configuration(); conf.setBoolean("mapred.compress.map.output", true); conf.setClass("mapred.map.output.compression.codec",GzipCodec.class, CompressionCodec.class); Job job=new Job(conf);
- hadoop深入研究:(九)——mapreduce中的压缩
- hadoop深入研究:(九)——mapreduce中的压缩
- hadoop深入研究:(九)——mapreduce中的压缩
- hadoop深入研究:(九)——mapreduce中的压缩
- hadoop深入研究:(七)——压缩
- hadoop深入研究:(七)——压缩
- hadoop深入研究:(七)——压缩
- hadoop深入研究:(七)——压缩
- hadoop深入研究:(七)——压缩
- Hadoop MapReduce中的压缩
- 深入理解与应用Hadoop中的MapReduce
- 深入理解与应用Hadoop中的MapReduce
- 深入理解与应用Hadoop中的MapReduce
- hadoop深入研究:(四)——distcp
- hadoop深入研究:(五)——Archives
- hadoop深入研究:(八)——codec
- hadoop深入研究:(四)——distcp
- Hadoop深入研究:(五)——Archives
- 揭开网络编程常见API的面纱
- C#上传文件或者图片
- 殊途同归:一群理想主义者的比特币创业
- gpio_request gpio_direction_output gpio_set_value
- 浅析linux工作原理
- hadoop深入研究:(九)——mapreduce中的压缩
- ubuntu 安装sun-jdk
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- GIT & REPO & GERRIT (四)
- excel 批量删除单元格中的“alt+enter”换行
- 利用HDC在内存上绘图
- 基于mAppWidget实现手绘地图(二)--概要
- python模块之HTMLParser
- Android批量打包