MapReduce数据压缩
- 压缩的分类
压缩格式 | 压缩格式 | 算法 | 文件扩展名 | 切分 | 换成压缩格式后,原来的程序是否要修改 |
---|---|---|---|---|---|
DEFLATE | 是,直接使用 | DEFLATE | .default | 否 | 和文本处理一样,不需要修改 |
Gzip | 是,直接使用 | DEFLATE | .gz | 否 | 和文本处理一样,不需要修改 |
Bzip2 | 是,直接使用 | Bzip2 | .bz2 | 是 | 和文本处理一样,不需要修改 |
LZO | 否,需要安装 | LZO | .lzo | 是 | 要建索引和指定输入格式 |
Snappy | 否,需要安装 | Snappy | .snappy | 否 | 和文本处理一样,不需要修改 |
- 压缩格式
压缩格式 | 对应的编码/解码器 |
---|---|
DEFAULT | org.apache.hadoop.io.compress.DEFAULTCodec |
gzip | org.apache.hadoop.io.compress.GzipCodec |
bizp2 | org.apache.hadoop.io.compress.Bzip2Codec |
LZO | com.hadoop.compression.lzo.LzoCodec |
Snappy | org.apache.hadoop.io.compress.SnappyCodec |
-
各种压缩的优缺点
-
Gzip压缩:
优点:压缩率比较高,压缩/解压缩度较快;Hadoop本身支持,在应用中处理Gzip格式的文件和直接处理文本一样;大部分Linux系统自带Gzip,使用方便
缺点:不支持Split(不可切分)
应用场景:压缩文件在130M之内 -
Bzip2压缩: 优点:支持Split;压缩率很高,比Gzip高,Hadoop本身支持
缺点:压缩/解压速度慢
应用场景:适合对速度要求不高,且对压缩率要求高的 -
Lzo压缩:
优点:压缩/解压都较快,合理的压缩率;支持Split,是hadoop中最常用的压缩格式;可以在Linux中安装lzopm命令,使用方便
缺点:压缩率比Gzip低,hadoop本身不支持,需要安装;还要做一些处理
应用场景:大文件 -
Snappy压缩: 优点:高速压缩速度和合理的压缩率
缺点:不支持Split;压缩率比Gzip低;hadoop本身不支持 -
压缩的使用
//开启Map输出端压缩
conf.setBoolean("mapreduce,map.output.compress",true);
//设置压缩方式
conf.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);
- Reduce端压缩决定着最终的输出文件类型
//开启Reduce端压缩
FileOutputFormat.setCompressOutput(job,true);
//设置压缩方式
FileOutputFormat.setOutputCompressorClass(job,BZip2Codec.class);