首页 > 编程知识 正文

试述栅格数据的压缩算法(数据压缩算法该如何选择?)

时间:2023-05-06 14:36:40 阅读:122796 作者:3227

我刚才写的这篇文章属于专栏《100个问题搞定大数据理论体系》。 这个专栏是笔者原创的。 引用请注明来源。 不足和错误请在评论区指出。 谢谢你。

本专栏的目录结构和文献引用请参考100个解决问题的大数据理论体系

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

补充为什么要进行数据压缩? 为了优化存储、减少存储容量和充分利用网络带宽,通常采用压缩方法。 大数据需要处理大量的数据,届时数据压缩非常重要。

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

但是,在大数据处理中,数据必须尽量机器可读。 通过使用序列化压缩技术将这些人可读的数据压缩为机器可读的数据,可以大大减少存储所需的空间。

以下是众所周知的压缩格式。 称为编解码器,可以压缩/序列化和解压缩/反序列化数据。

Gzip (扩展名. gz )是Gzip,是一种众所周知的压缩格式,在互联网世界中广泛使用。 使用此格式可以压缩请求和响应,从而有效利用网站/web APP应用程序的带宽。

好处是压缩高,hadoop本身支持。 在APP应用程序中处理gzip格式的文件与直接处理文本相同,具有hadoop native库,大多数linux系统都附带gzip命令,使用起来很方便。

缺点不支持拆分

何谓hadoop native?

考虑到性能问题和某些Java类库的不足,Hadoop为某些组件提供了自己的本地实现。 这些组件存储在Hadoop独立动态链接的库中。 该库在Unix平台上被称为libhadoop.so。

Snappy (扩展名. Snappy )是谷歌开发的编解码器(以前称为Zippy ),被认为是中压缩比中性能最好的。 在这种格式中,性能比压缩率更重要。 Snappy是应用最广泛的格式之一,显然是因为其优良的性能。

好处支持压缩速度快的hadoop native库

缺点是不支持分裂; 压缩率低; hadoop本身不受支持,需要安装; 在linux系统上没有相应的命令

LZO (扩展名为. LZO )由GNU公共许可证(GPL )许可,与Snappy非常相似。 具有中等压缩率,压缩和解压缩性能高。 LZO是一种基于解压缩速度的无损数据压缩算法。

优点压缩/解压缩速度快,支持合理的压缩率split,是hadoop中最受欢迎的压缩格式; hadoop native库支持; 需要在linux系统上自行安装lzop命令,使用方便

缺点hadoop本身不受支持,需要安装的lzo支持剥离,但必须在lzo文件中创建索引。 否则,hadoop也会将lzo文件视为普通文件。 (必须创建索引以支持split,并且必须将InputFormat指定为lzo格式。

LZ4 (扩展名. LZ4 )优点性能好,压缩比高,首次初始化速度好,压缩速度和稳定性也好

缺点lz4不支持split Bzip2 (扩展名. bz2 ),或类似于GZip,压缩率高于GZip,因为lz4解压缩麻烦,需要指定原始字节数组的大小。 但正如所料,Bzip2的数据解压缩速度慢于GZip。 一个重要方面是支持数据分割。 这在将HDFS用作存储时非常重要。 如果数据只是在没有查询的情况下存储,则此压缩非常适用。

优点:具有支持拆分的高压缩率,压缩率高于gzip的hadoop本身支持,但不支持本机; linux系统附带bzip2命令,使用方便

缺点:不支持压缩/解压缩速度慢的本机

zstd (扩展名. zstd ) zstd是Facebook于2016年开源的新型无损压缩算法,具有压缩率和压缩/解压缩性能突出的优点。 zstd还具有特殊的功能,可支持通过训练方法生成词典文件,与传统压缩方法相比,大大提高了数据包的压缩率。

在大数据量文本压缩场景中,zstd是综合考虑压缩率和压缩性能的最佳选择,其次是lz4。 在数据量较少的压缩场景中,如果使用zstd字典方法,压缩效果会更明显。 支持split,但还不完整。 详情请参阅—— iszstdsplitabbleinhadoop/spark/etc? 选择前面的每个压缩算法都有优点和缺点。 如果压缩率相对较高(压缩后节省较大空间),则解冻速度通常较慢,反之则解冻速度较快。

两者都没有完美的方法,只能选择一种方法来使用。 这取决于进入系统的数据,必须根据情况进行选择。

如果需要选择压缩算法,请参阅以下选项

将文件分成几个块,并用适当的算法压缩。 由于选择Hadoop(HDFS )作为数据持久化机制,因此这些数据块必须与压缩后预期的内存插槽相匹配(由HDFS配置)。 首先选择允许分割、重新压缩的压缩格式。 选择可以拆分和压缩的容器文件格式,如Avro和Parquet。 这些格式可以与其他压缩格式混合使用,以达到用户所需的速度和压缩率。 关于Avro和Parquet的详细情况请参考我的这两个博客——

什么是Apache Avro? 什么是Parquet

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。