在 HiveSQL 的 create table 语句中,可以使用 stored as ... 指定表的存储格式。Apache Hive

支持 Apache Hadoop 中使用的几种熟悉的文件格式,比如 TextFileSequenceFileRCFile

AvroORCParquetFile等。

列式存储和行式存储

TEXTFILE 和 SEQUENCEFILE 的存储格式都是基于行存储的,ORC 和 PARQUET 是基于列式存储的。

第一种:TextFile

1、存储方式:行存储。默认格式,如果建表时不指定默认为此格式。

2、每一行都是一条记录,每行都以换行符"\n"结尾。默认是不压缩,但可以采用多种压缩方式,但是部分压缩算法压缩数据后生成的文件是不支持split。

3、可结合Gzip、Bzip2等压缩方式一起使用(系统会自动检查,查询时会自动解压),推荐选用可切分的压

缩算法。

4、该类型的格式可以识别在hdfs上的普通文件格式(如txt、csv),因此该模式常用语仓库数据接入和导出层;

5、无法区分数据类型,各个字段都被认为是文本,但需要制定列分隔符和行分隔符。

第二种:Sequence File

1、SequenceFile是一种二进制文件,以<key,value>的形式序列化到文件中。存储方式:行存储

2、支持三种压缩选择:NONE、RECORD、BLOCK。RECORD压缩率低,一般建议使用BLOCK压缩。

3、优势是文件和Hadoop API的MapFile是相互兼容的

4、缺点是由于该种模式是在textfile基础上加了些其他信息,故该类格式的大小要大于textfile,现阶段基本上不用。

第三种:RC File

1、存储方式:数据按行分块,每块按照列存储

A、首先,将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。

B、其次,块数据列式存储,有利于数据压缩和快速的列存取。

2、相对来说,RCFile对于提升任务执行性能提升不大,但是能节省一些存储空间。可以使用升级版的ORC格

式。

第四种:ORC File

1、存储方式:数据按行分块,每块按照列存储

2、Hive提供的新格式,属于RCFile的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快,快速

列存取。

3、ORC File会基于列创建索引,当查询的时候会很快,现阶段主要使用的文件格式。

第五种:Parquet File

1、存储方式:列式存储

2、Parquet对于大型查询的类型是高效的。对于扫描特定表格中的特定列查询,Parquet特别有用。

Parquet一般使用Snappy、Gzip压缩,默认是Snappy。

上图展示了一个 Parquet 文件的内容,一个文件中可以存储多个行组,文件的首位都是 该文件的 Magic Code,用于校验它是否是一个 Parquet 文件,Footer length 记录了文件元数

据的大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行 组的元数据信息和该文件存储数据的 Schema 信息。除了文件中每一个行组的元数据,每一 页的开始都会存储该页的元数据,在 Parquet 中,有三种类型的页:数据页、字典页和索引

页。数据页用于存储当前行组中该列的值,字典页存储该列值的编码字典,每一个列块中最 多包含一个字典页,索引页用来存储当前行组下该列的索引,目前 Parquet 中还不支持索引 页。

总结

表的文件存储格式尽量采用Parquet或ORC,不仅降低存储量,还优化了查询,压缩,表关联等性能。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐