Hadoop中用得比较多的4种压缩格式:lzo,gzip,snappy,bzip2。它们的优缺点和应用场景如下:

1). gzip压缩

优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。

缺点:不支持split。

应用场景:当每个文件压缩之后在130M以内的(1个Block大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip文件,运行MapReduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的MapReduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

2). lzo压缩

优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;可以在linux系统下安装lzop命令,使用方便。

缺点:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

3). snappy压缩

优点:高速压缩速度和合理的压缩率;支持hadoop native库。

缺点:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;linux系统下没有对应的命令。

应用场景:当MapReduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入。

4). bzip2压缩

优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。

缺点:压缩/解压速度慢;不支持native。

应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为MapReduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。

4种压缩格式的特征的比较
压缩格式 split native 压缩率 速度 是否hadoop自带 linux命令 原程序是否要修改
gzip 很高 比较快 是,直接使用 不需要
lzo 比较高 很快 否,需要安装 要建索引,指定输入格式
snappy 比较高 很快 否,需要安装 没有 不需要
bzip2 最高 是,直接使用 不需要

1).map输入压缩

如果输入文件是压缩过的,那么在被MapReduce读取时,它们会被自动解压,根据文件扩展名来决定应该使用哪一个压缩解码器。

2).map输出压缩

Configuration conf = new Configuration();

//配置map输出压缩以及压缩格式
conf.setBoolean("mapreduce.compress.map.output", true);
conf.setClass("mapreduce.map.output.compress.codec", GzipCodec.class, CompressionCodec.class);

3).reduce输出压缩

//配置reduce结果压缩以及压缩格式
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

最新文章

  1. js性能优化-事件委托
  2. Fresco简单的使用—SimpleDraweeView
  3. view坐标_ _ Android应用坐标系统全面详解
  4. 集群NAS技术架构
  5. ASP从HTML标签中提取中文
  6. vue-cli + sass 的正确打开方式
  7. web前端优化--DOM性能优化
  8. 在 .NET中,一种更方便操作配置项的方法
  9. 云笔记项目-Spring事务学习-传播NEVER
  10. python语法之函数2
  11. C#版 - LeetCode 148. Sort List 解题报告(归并排序小结)
  12. webpack学习笔记--其它配置项
  13. Centos7中docker开启远程访问
  14. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期
  15. js判断数据类型的四种方法
  16. centos7 重置root 密码
  17. Unity Alpha融合参数(便查)
  18. artTemplate 简洁语法版
  19. onWindowFocusChanged重要作用 and Activity生命周期
  20. AES加解密

热门文章

  1. vscode中设置自动保存
  2. JavaScript中的原型与原型链
  3. LeetCode_Search in Rotated Sorted Array
  4. PDO 指南
  5. 源码包安装(Python mysql redis)
  6. git mv与直接mv的区别
  7. 从原型链看DOM--Text类型
  8. 简明python教程九----异常
  9. mysql update 多表 (复制)
  10. Mac下 Visual VM 无法检测到本地的Java进程