存储格式:
指在hive建表的时候指定的将表中的数据按照什么样子的存储格式,如果制定了A方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型。
hive的文件存储格式包括以下几类:
- textfile
- sequencefile
- rcfile
- orcfile
- parquet
- 自定义格式
textfile和sequencefile是行式存储,orcfile和parquet是列式存储
(1)textfile
-
默认的存储格式
-
存储方式:行存储
-
不压缩
-
磁盘开销大,数据解析开销大;使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
(2)sequencefile -
二进制文件,以<key,value>的形式序列化到文件中
-
存储方式:行存储
-
支持三种压缩选择:NONE,RECORD,BLOCK,RECORD压缩率低,一般建议使用BLOCK压缩
-
优势:文件和Hadoop API中的mapfile是相互兼容的
(3)rcfile -
存储方式:数据按行分块,每块按照列存储
-
压缩快,快速列存取
-
其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。
(4)orcfile -
存储方式:数据按行分块,每块按照列存储
-
效率比refile高,是refile的改良版
(5)parquet
类似于orc,相对于orc文件格式,Hadoop的生态系统中大部分工程都支持parquet文件。
压缩比:orcfile > Parquet > textFile(textfile没有进行压缩)
查询速度:三者几乎一致
具体读写性能查询测试结果可参照这篇文章:https://blog.csdn.net/weixin_36714575/article/details/80091578?utm_source=app&app_version=4.16.0
TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;并且SEQUENCEFILE是存储为二进制文件
ORC和PARQUET是基于列式存储的
行列混合存储的RCFile,该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。先将数据按行水平划分为行组,这样一行的数据就可以保证存储在同一个集群节点;然后在对行进行垂直划分,RCFile全称Record Columnar File,列式记录文件,是一种类似于SequenceFile的键值对(Key/Value Pairs)数据文件,