Hive常见的存储格式的区别与应用场景
一、文件存储格式
行存储和列存储
1.TextFile
2.sequencefile
3.RC
4.orc(工作中常用)
5.parquet
二、四种存储格式分析
一、文件存储格式
在HIVE中,常见的文件存储格式有
TextFile
Parquet
ORC
Sequencefile
RC
AVRO
注意:TextFile、Sequencefile 基于行存储,ORC、Patquet基于列存储
行存储和列存储
上图中左边为行存储,右边为列存储
行存储的特点:查询满足条件的一整行数据时,列式存储则需要去每个聚集的字段找到对应的每列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询数据更快。
列式存储的特点:查询满足条件的一整列数据的时候,行存储则需要去每个聚集的字段找到对应的每个行的值,列存储只需要找到其中一个值,其余的值都在相邻的地方,所以此时列式查询的速度更快。另一方面,每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的压缩算法
当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。
在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。
1.TextFile
Hive中默认的存储文件格式,行存储。每一行都是一条记录,每行都以换行符(\n)结尾。数据不做压缩,磁盘开销大,数据解析开销大。文件拷贝至hdfs不进行处理。
优点:最简单的数据格式,便于和其他工具(Pig,grep,sed,awk)共享数据,便于查看和编辑;加载较快
缺点:耗费存储空间,I/O性能较低;Hive不进行数据切分合并,不能进行并行操作,查询效率低。
应用场景:适合于小型查询,查看具体数据内容的和测试操作。
建表是进行限定:
stored as textfile
2.sequencefile
含有键值对的二进制文件,行存储,Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点
优点:可压缩、可分割,优化磁盘利用率和I/O;可并行操作数据,查询效率高
缺点:存储空间消耗最大;对于Hadoop生态系统之外的工具不适用,需要通过text文件转换加载
解释:text转换加载,是指linux的shell端的 -text 命令来查看二进制数据
应用场景:适用于数据量较小,大部分列的查询。
建表是进行限定:
sorted as sequencefile
3.RC
是一种行列存储相结合的存储方式。首先,将数据按行分块,保证同一个record在一个快上,避免读一个记录需要读取多个block。其次,快数据列式存储,有利于数据压缩和快速的列存储。
4.orc(工作中常用)
orc文件代表了优化排柱状的文件格式。orc文件格式提供了一种将数据存储在Hive表中的高效方法。这个文件系统实际上是为了克服其他Hive文件格式的限制而设计的。HIve从大型表读取、写入和处理数据时,使用orc文件可以提高性能
数据按行分块 每块按列存储。
特点:压缩快,快速列存取、是rcfile的改良版本。
缺点:加载时性能消耗较大;需要通过text文件转化加载;
应用场景:适用于Hive中大型的存储、查询
建表是进行限定:
sorted as orc
5.parquet
parquet类似于orc、相对于orc文件格式,hadoop生态系统中大部分工程都支持parquet文件。
存储模式:按列存储,Parquet文件是以二进制方式存储的,不可以直接读取和修改,文件是自解析的,文件中包括该文件的数据和元数据。
优点:Parquet能够很好的压缩和编码,有良好的查询性能,支持优先的模式演进。
缺点:写速度通常比较慢,不支持update、insert,delete、ACID等特性。
应用场景:适用于字段数非常多,无更新、只取部分列的查询。
二、四种存储格式分析
比对三种主流的文件存储格式TEXTFILE 、ORC、PARQUET
压缩比:ORC > Parquet > textFile(textfile没有进行压缩)
查询速度:三者几乎一致