文件格式和压缩格式介绍

                               文件格式和压缩格式介绍
一.常用的文件存储格式

  • TEXTFILE
  • textfile为默认格式,存储方式为行式存储,在检索时磁盘开销大 数据解析开销大,而对压缩的text文件 hive无法进行合并和拆分
  • SEQUENCEFILE
  • 二进制文件,以<key,value>的形式序列化到文件中,存储方式为行式存储,可以对文件进行分割和压缩,一般使用block压缩,使用Hadoop 的标准的Writable 接口实现序列化和反序列化,和hadoop api中的mapfile是相互兼容的。
  • RCFILE
  • 存储方式为数据按行分块,每块按照列存储的行列混合模式,具有压缩快,列存取快的特点。
  • 在使用时,读记录尽量涉及到的block最少,这样读取需要的列只需要读取每个row group 的头部定义,具有明显速度优势。
  • 读取全量数据的操作 性能可能比sequencefile没有明显的优势。

Apache Orc 和Apache Parquet
这两种是hive发展过程中出现的存储格式并发展为Apache独立*项目。

  • Orc是从HIVE的原生格式RCFILE优化改进而来。
  • Parquet是Cloudera公司研发并开源的格式。

这两者都属于列存储格式,但Orc严格上应该算是行列混合存储,首先根据行组分割整个表,在每一个行组内进行按列存储。
Parquet文件和Orc文件都是是自解析的,文件中包括该文件的数据和元数据,Orc的元数据使用Protocol Buffers序列化。
两者都支持嵌套数据格式(struct\map\list),但策略不同:

Parquet支持嵌套的数据模型,类似于Protocol Buffers,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名。
ORC原生是不支持嵌套数据格式的,而是通过对复杂数据类型特殊处理的方式实现嵌套格式的支持。

推荐博客:https://www.jianshu.com/p/90eb91f590dd


二.压缩格式

使用压缩技术,可以减少文件的存储空间,并且在传输文件的时候减少IO消耗

压缩格式列表:

文件格式和压缩格式介绍

文件格式和压缩格式介绍

文件格式和压缩格式介绍

压缩格式 优点 缺点
gzip 压缩比在四种压缩方式中较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便 不支持split
lzo 压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;需要在linux系统下自行安装lzop命令,使用方便 压缩率比gzip要低;hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定inputformat为lzo格式)  
snappy 压缩速度快;支持hadoop native库 不支持split;压缩比低;hadoop本身不支持,需要安装;linux系统下没有对应的命令d. bzip2
bzip2 支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便 压缩/解压速度慢;不支持native

由此可以看出压缩性能最好的BZIP2,在压缩的过程中所需要的时间相对是最高的,所以我存储文件的时候我们要合理选择对应的压缩格式

在选择压缩格式的时候我们需要注意以下几点:

1.看清当下需求,是希望压缩之后的文件占用存储比较少、还是希望压缩的过程中少占用一些资源

2.压缩格式最好选择可以分割的,这样方便后面做计算处理