数据压缩算法该如何选择?

写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

大数据领域常见的压缩格式有 gzip,snappy,lzo,lz4,bzip2,zstd。

在这里插入图片描述

补充

为什么要进行数据压缩?

为了优化存储(减少存储空间)和充分利用网络带宽,通常采用压缩方法。大数据需要处理海量数据,此时数据压缩非常重要。

在企业中存在的许多场景中,通常,数据源来自多种文本格式(CSV、TSV、XML、JSON等)数据。这些文件是人类可读的,但占用了大量的存储空间。

然而在大数据处理中数据应尽可能为机器可读。使用序列化的压缩技术将这些人类可读的数据压缩成机器可读的, 可确保存储所需的空间大大减少。

以下是一些众所周知的常用压缩格式(称为编解码器,允许数据压缩/序列化和解压缩/反序列化)

Gzip(扩展名为.gz)

即 GNU Zip(GZip),一种众所周知的压缩格式,并且在互联网世界中被广泛使用。可以使用此格式压缩请求和响应,以有效利用网站/Web应用程序的带宽。

优点

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

缺点

不支持split

hadoop native 是什么?
鉴于性能问题以及某些Java类库的缺失,对于某些组件,Hadoop提供了自己的本地实现。 这些组件保存在Hadoop的一个独立的动态链接的库里。这个库在Unix平台上叫libhadoop.so.

Snappy(扩展名为.snappy)

由 Google开发的编解码器(以前称作Zippy),被认为是中等压缩比中性能最好的。对于该格式而言,性能比压缩比更为重要。Snappy属于最为广泛使用的格式之一,显然是由于其出色的性能。

优点

压缩速度快;支持hadoop native库

缺点

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

LZO(扩展名为.lzo)

由GNU公共许可证(GPL)授权,与 Snappy非常类似,它具有中等压缩比,而压缩与解压缩性能很高。LZO是一种专注于解压缩速度的无损数据压缩算法。

优点

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

缺点

hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定InputFormat为lzo格式)。

LZ4(扩展名.lz4)

优点

性能好压缩比高,首次初始化速度较好,压缩速度和稳定性也都不错

缺点

  1. lz4的解压比较麻烦,需要指定原byte数组大小,所以开发起来工作量要大些
  2. 不支持split

Bzip2(扩展名.bz2)

或多或少与GZip类似,压缩比高于GZip。但如预期一样, Bzip2的数据解压缩速度比GZip慢。其中一个重要的方面是,它支持数据分割,这在使用HDFS作为存储时非常重要。如果数据只是被存储而无须查询,那么这种压缩将是一个不错的选择。

优点:

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

缺点:

压缩/解压速度慢;不支持native

zstd(扩展名.zstd)

zstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。zstd还有一个特别的功能,支持以训练方式生成字典文件,相比传统压缩方式能大大的提高小数据包的压缩率。

  1. 对大数据量的文本压缩场景,zstd是综合考虑压缩率和压缩性能最优的选择,其次是lz4。
  2. 对小数据量的压缩场景,如果能使用zstd的字典方式,压缩效果更为突出。
  3. 支持split, 但是还不完善,详情可见——Is zstd splitabble in hadoop/spark/etc?

选择

前面的每种压缩算法都有其优点和缺点。如果压缩比比较高(压缩后节约较大空间)则解压缩速度通常很慢,反之,则解压缩速度快。

没有两全其美的办法,只能选择一种方法来使用。这取决于进入系统的数据,必须根据具体情况来选择。

当需要选择压缩算法时,以下选项可供参考

  1. 将文件分成若干块,然后使用适合的算法进行压缩。由于选择了 Hadoop(HDFS)作为数据持久化机制,因此需要确保这些数据块在压缩后能与预期的memory slot适配(在HDFS中配置)。
  2. 选择允许先分割、再压缩的压缩格式。
  3. 选择允许分割和压缩的容器文件格式,如Avro和Parquet。这些格式可以与其他压缩格式混合使用,以达到用户用例所要求的速度和压缩比。

Avro 和 Parquet

详情请见我的这两篇博客——

  1. Apache Avro是什么?
  2. Parquet是什么
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
### 回答1: OSGB压缩算法是指用于压缩和解压缩Ordnance Survey National Grid(OSNG)坐标的算法。OSNG是英国测绘局(Ordnance Survey)使用的地理坐标系,用于精确定位英国的地理位置。 常见的OSGB压缩算法包括: 1. Grid Inclusion Algorithm(GIA):使用数学方法将坐标压缩到较小的字符串中,以便在数据传输过程中进行传输。 2. Two-letter Code(TLC):使用两个字母来编码每个坐标点,并使用数字来编码坐标的小数部分。 3. National Grid Reference System(NGRS):使用网格编号系统来编码坐标,使用英文字母和数字来表示每个坐标点。 4. Easting and Northing(E&N):使用坐标系的东西方向(easting)和南北方向(northing)来表示坐标。 这些算法都可以用于压缩和解压缩OSNG坐标,但在实际应用中,使用的算法可能会有所不同。 ### 回答2: OSGB压缩算法是指用来对OSGB数据进行压缩的算法。OSGB是一种用于表示地理数据的文件格式,常用于地图和GIS应用中。 目前常用的OSGB压缩算法有以下几种: 1. Deflate算法:Deflate算法是一种常用的无损压缩算法,可以对OSGB数据进行压缩。它通过移除数据中的冗余信息和利用重复的数据模式来减少文件大小。Deflate算法广泛应用于ZIP压缩格式中。 2. LZW算法:LZW算法是一种无损压缩算法,常用于GIF图像格式中。它利用字典编码技术,将连续出现的相同字节序列替换为更短的编码,从而实现压缩。LZW算法在某些情况下能够很好地压缩OSGB数据。 3. LZ77算法:LZ77算法是一种常用的无损压缩算法,常用于ZIP压缩格式和PNG图像格式中。它利用字典编码技术和滑动窗口机制,将数据中的重复片段替换为更短的指针,从而实现压缩。 4. RLE算法:RLE算法是一种简单的无损压缩算法,常用于一些简单的图像格式中。它通过统计连续出现的相同字节序列的次数,并用一个计数值代替这些序列,从而实现压缩。 这些算法在实际应用中可以根据OSGB数据的特点选择合适的压缩算法进行处理,以达到较好的压缩效果和解压缩速度。 ### 回答3: OSGB压缩算法主要有以下几种:LZ77,Huffman编码,LZW和Run Length编码。 LZ77是一种基于滑动窗口的压缩算法,通过将重复出现的数据替换为指向先前出现位置的指针来实现压缩。LZ77算法利用了数据的局部性特点,能够有效地减少数据的冗余,实现较的压缩比。 Huffman编码是一种基于统计信息的压缩算法,通过建立字符出现频率的统计模型,并构建相应的编码表,将出现频率较的字符用较短的编码表示,从而实现压缩。Huffman编码算法通过合理设计编码表,使得频率较的字符使用较短的编码形式,能够进一步减少数据的冗余。 LZW算法是一种基于字典的压缩算法,通过建立一个动态字典,将出现的字符序列映射为唯一的编码,实现压缩。LZW算法不仅可以对单个字符进行编码,还可以对连续出现的字符序列进行编码,进一步提压缩率。 Run Length编码是一种简单的压缩算法,通过将连续出现的重复字符序列替换为一个计数值和该字符的表示,实现压缩。Run Length编码算法适用于连续出现大量相同字符的情况,例如图像或音频数据中的重复值序列。 这些OSGB压缩算法在实际应用中常常结合使用,通过组合不同的压缩算法,可以实现更效的数据压缩和解压缩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值