HDFS存储格式及压缩算法

存储格式

1 SequenceFile

以二进制键值对的形式存储数据,支持三种记录存储方式。.

无压缩: io效率较差,相比压缩,不压缩的情况下没有什么优势。

记录级压缩:对每条记录都压缩,这种压缩效率比较一 般。

块级压缩: 这里的块不同于HDFS中的块的概念.这种方式会将达到指定块大小的二进制数据压缩为一个块。

2 Avro

将数据定义和数据一起存储在一条消息中, 其中数据定义以JSON格式存储,数据以二

进制格式存储。Avro 标记用于将大型数据集分割成适合MapReduce处理的子集。

3 RCFile

以列格式保存每个行组数据。它不是存储第一行 然后是第二行,而是存储所有行上的第

1列,然后是所行 上的第2列,以此类推。

4 Parquet

是Hadoop的一种列存储格式,提供了高效的编码和压缩方案。

压缩算法

1 Gzip 压缩

优点:压缩率比较高,而且压缩/解压速度也比较快; Hadoop 本身支持,在应用中处

理gzip格式的文件就和直接处理文本-一样,大部分linux 系统都自带gzip 命令,使用方便.

缺点:不支持split

应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip

压缩格式:例如说一天或者一个小时的日志压缩成-一个gzip文件,运行MapReduce程序

的时候通过多个gzip 文件达到并发。Hive 程序,streaming 程序,和Java 写的

MapReduce程序完全和文本处理一样, 压缩之后原来的程序不需要做任何修改。

2 Bzip2 压缩

优点:支持split; 具有很高的压缩率,比gzip 压缩率都高; Hadoop 本身支持,但不

支持native; 在linux 系统下自带bzip2 命令,使用方便。

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

应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为MapReduce

作业的输出格式:或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空

间并且以后数据用得比较少的情况:或者对单个很大的文本文件想压缩减少存储空间,同时

又需要支持split, 而且兼容之前的应用程序(即应用程序不需要修改)的情况。

native 是Hadoop的本地库参,考https://zhuanlan.zhihu.com/p/340835557)

3 Lzo压缩

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

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

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

4 Snappy 压缩

优点:高速压缩速度和合理的压缩率。

缺点:不支持split; 压缩率比gzip 要低; Hadoop 本身不支持,需要安装;

应用场景:当MapReduce 作业的Map 输出的数据比较大的时候,作为Map到

Reduce的中间数据的压缩格式:或者作为一个MapReduce作业的输出和另外一个

MapReduce作业的输入。

原文链接:https://blog.csdn.net/TYM112/article/details/118409786

posted @ 2023-01-05 09:22  莲藕淹  阅读(418)  评论(0编辑  收藏  举报