为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?

检查Hadoop版本的压缩格式是否可用【我在Hadoop cdh 5.7版本中查看Hadoop压缩格式】

$ hadoop version

$ hadoop checknative

一、在解答上述问题以前,我们先说一下压缩的优缺点

【优点】

  • 1.减少磁盘存储空间
  • 2.降低IO(其中包括网络IO和磁盘IO)
  • 3.加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度

【缺点】

1.由于使用数据时需要先解压,就会加重CPU的负荷

二、压缩格式

压缩格式 工具 算法 扩展名 是否支持分割 Hadoop编码/解码
DEFLATE N/A DEFLATE .deflate No org.apache.hadoop.io.compress.DefalutCodec
gzip gzip DEFLATE .gz No org.apache.hadoop.io.compress.GzipCodec
bzip2 bzip2 bzip2 .bz2 Yes org.apache.hadoop.io.compress.Bzip2Codec
LZO Lzop LZO .lzo Yes(if index) com.hadoop.compression.lzo.LzoCodec
LZ4 N/A LZ4 .lz4 No org.apache.hadoop.io.compress.Lz4Codec
Snappy N/A Snappy .snappy No org.apache.hadoop.io.compress.SnappyCodec

【压缩比】

从上图可以看出,压缩比越高,压缩速率越慢,压缩时间越长,压缩比:Snappy<LZ4<LZO<GZIP<BZIP2(注意,压缩比的大小不是通过数字的大小来看的,是数字越小,压缩比越大,所以snappy的压缩比是22.2%,数据最大,但是压缩比是最小的)

 三、各自压缩格式的优缺点

【gzip】

优点:

  • 1@压缩比在四中压缩方式中较高;
  • 2@hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样,
  • 3@有hadoop native库;
  • 4@大部分linux系统自带gzip命令,使用方便

缺点:

  • 1@不支持split

【lzo】

优点:

  • 1@压缩速率仅次于gzip,解压速率是最快的
  • 2@支持split,是hadoop中最流行的压缩格式;
  • 3@支持hadoop native库
  • 4@需要在linux系统下自行安装lzop命令,使用方便

缺点:

  • 1@压缩比要比gzip低
  • 2@hadoop本身比支持,需要安装;
  • 3@lzo虽然支持split,但是需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要制定inputformat为lzo格式)

【snappy】

优点:

  • 1@压缩速度最快
  • 2@支持hadoop native库

缺点

  • 1@不支持split
  • 2@压缩比最低
  • 3@hadoop本身不支持,需要安装
  • 4@linux系统下没有对应的命令

【bzip2】

优点:

  • 1@支持split
  • 2@压缩比最高,比gzip都高;
  • 3@hadoop本身支持,但不支持native
  • 4@在linux系统下自带bzip2命令,使用方便

缺点:

  • 1@压缩解压速率慢
  • 2@不支持native

四、总结和应用场景

【总结】

每一种压缩方式都有他的优缺点,讲求压缩效率,压缩比就会低,占用的网络io和磁盘io就多,讲求压缩比,对cpu的损耗就比较大,同时压缩和解压的耗时就比较多,

对于支持split的(lzo和bzip)可以实现并行处理。

【应用场景】

不同的场景选择不同的压缩方式,肯定没有一个一劳永逸的方法,如果选择高压缩比,那么对于cpu的性能要求要高,同时压缩、解压时间耗费也多;选择压缩比低的,对于磁盘io、网络io的时间要多,空间占据要多;对于支持分割的,可以实现并行处理。

应用场景:

input: Flume Sink HDFS <== Spark/MapReduce 比如flume采集到hdfs会使用到压缩
    temp:   Sink DISK  比如中间数据落地磁盘也可以使用压缩
    output: Spark/MapReduce ==> Sink Hadoop 比如spark/mr的输出会到hdfs使用到压缩

一般在HDFS 、Hive、HBase中会使用;

当然一般较多的是结合Spark 来一起使用。

五、为什么map端和reduce端的应用压缩格式和大小的选择?

现在再让我们回过头来看我们刚刚开始提出的问题

【为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?】

这个问题可以结合前边老师提出的为什么MR的执行性能不理想来考虑?

当时这个问题的答案是因为每次都要落地到磁盘,

1、Map压缩主要是增加mr运行的效率,我们就需要找压缩效率最高的压缩格式,snappy的压缩时间最快

2、Reduce压缩就是输出文件压缩 ,故考虑占用磁盘空间的大小;选择高压缩比gzip或者bzip2;而考虑到会用reduce结果做二次运算;

则对于选用不支持分割gzip或者bzip2原因有两个:

(1)是这两个压缩格式高

(2)对于不可分割我们采用每个reduce端压缩后的数据不要超过一个block的大小的方法;则对于后续的map清洗也就不会出现分割问题。

【压缩在hadoop中的应用】

参考博客:https://www.cnblogs.com/xuziyu/p/10678135.html

https://my.oschina.net/u/4005872/blog/3030869

【超级有用】大数据的压缩格式相关推荐

  1. 大数据常见压缩格式以及性能对比

    1. 压缩的好处和坏处 好处 减少存储磁盘空间 降低IO(网络的IO和磁盘的IO) 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度 坏处 由于使用数据时,需要先将数据解压,加重CPU负荷 2 ...

  2. 大数据-常用压缩方式总结

    转载声明 本文系转载自以下两篇文章: 压缩格式gzip/snappy/lzo/bzip2 比较与总结 作者: zzhongcy Snappy.Lzo.Gzip.Bzip2比较 作者: 心有余力 转载仅 ...

  3. c++大数据量压缩方法——基于zlib的gzip解压缩方法

    在项目中用到了基于数据库的大数据量存取时,我们要考虑的是数据读取速度,及数据存储大小,往往数据存储量大的话,数据读取速度也会随之降低,所以我们降低数据存储大小的方法,一是,使用位单位来存储数据,尽量压 ...

  4. linux、windows中ping大数据包的命令格式

    linux下ping包的默认大小为64Byte,次数不限.但有时我们需要尝试ping大数据包,来测试网络的状况,这时,就要指定ping包的大小了. Linux下ping大数据包的格式; 语  法:pi ...

  5. 压缩格式gzip,bzip2,lzo,snappy

    gzip,bzip2,lzo,snappy是hadoop中比较常见的文件压缩格式,可以节省很多硬盘存储,以下是Gzip , BZip2 , Lzo Snappy 四种方式的优缺点 和使用场景 1.Gz ...

  6. 数据分析大数据面试题大杂烩02

    Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill ...

  7. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...

  8. hadoop中MapReduce中压缩的使用及4种压缩格式的特征的比较

    在比较四中压缩方法之前,先来点干的,说一下在MapReduce的job中怎么使用压缩. MapReduce的压缩分为map端输出内容的压缩和reduce端输出的压缩,配置很简单,只要在作业的conf中 ...

  9. Hadoop文件压缩格式分析和比较

    Hadoop支持压缩格式: 压缩格式 可分割 算法 扩展名 Linux工具 gzip 否 DEFLATE .gz gzip lzo 是(加索引) LZO .lzo lzop snappy 否 Snap ...

  10. 面向智能化软件开发的开源生态大数据

    点击上方蓝字关注我们 面向智能化软件开发的开源生态大数据 张洋1, 王涛1, 尹刚2,3, 余跃1, 黄井泉3 1 国防科技大学计算机学院,湖南 长沙 410073 2 绿色计算产业联盟,北京 100 ...

最新文章

  1. 证明创建runnable实例和普通类时间一样长
  2. [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
  3. 机器学习笔记(3) 随机森林
  4. Java从零开始学十四(包和访问控制)
  5. 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
  6. java 如何查看jdk版本位数
  7. R语言数据清洗实战——高效list解析方案
  8. 广州最最最牛逼的 IT 公司全在这了!
  9. 关于Atmel A5D31平台ALC5640音频芯片的问题记录
  10. Origin 2022安装教程(附下载链接)
  11. canal 记录 ROWDATA TRANSACTIONBEGIN
  12. wget -O- ...|sh 的含义
  13. 在 V2EX 的开发环境里尝试了一下 OneAPM @livid
  14. H2数据库中的数据类型
  15. C语言获取执行程序所在的目录路径
  16. python爬取微博博主历史博文存入Excel
  17. echarts关系图指向混乱
  18. 2021 An Updated Comparison of Four Low Earth Orbit Satellite Constellation Systems to Provide Global
  19. 从零开始研发GPS接收机连载——8、跟踪调试之遇到瓶颈
  20. 研究开发出 3D 打印 “食品墨水”

热门文章

  1. The working copy needs to be upgraded
  2. 二元置信椭圆r语言_医学统计与R语言:Meta 回归作图(Meta regression Plot)
  3. IB中文阅读书单推荐
  4. 你还不了解QQ聊天是如何实现的吗?手把手教你实现网络聊天室
  5. Hadoop HA架构图
  6. 360 linux 杀毒,360主机卫士Linux后门专杀版
  7. 视频如何去水印-免费视频水印去除工具
  8. python数据处理-整理表格数据
  9. 自制流媒体播放器(Qt+ffmpeg+SDL)小结
  10. MIMO系统信道容量分析