[数据存储] 浅析 Hive 数据存储格式

0 序言

续接[数据存储] 浅谈大数据领域的数据存储格式:ORC / Avro / Parquet / Arrow- 博客园/千千寰宇,展开回顾一下 Hive 的数据存储格式。

1 概述: Hive

Hive支持多种存储格式,选择合适的存储格式对于提升查询性能和存储效率至关重要。

常见的Hive存储格式包括TextFile、SequenceFile、RCFile、ORCFile和Parquet。

这些格式中,TextFile是默认的存储格式,而SequenceFile、RCFile、ORCFile和Parquet则提供了更高效的数据压缩和查询性能。

TextFile存储格式

TextFile是Hive的默认存储格式,它将数据以纯文本形式存储,不进行任何压缩处理。

创建TextFile格式的Hive表时,可以直接使用LOAD DATA语句将数据加载到表中,这是因为TextFile不涉及数据压缩,因此加载速度快。

但是,TextFile格式的缺点是磁盘占用较大,且在查询时需要逐个字符判断分隔符,导致查询效率不高。

SequenceFile存储格式

SequenceFile是Hadoop提供的一种二进制文件格式,支持数据的可分割和压缩。

它以键值对的形式存储数据,可以选择记录压缩或块压缩。

SequenceFile格式的表不能直接从本地文件加载数据,需要先将数据导入到TextFile格式的表中,然后使用INSERT语句导入到SequenceFile格式的表中。

RCFile存储格式

RCFile(Row Columnar File)是一种行列混合存储的文件格式,它先将数据按行分组,然后在每个行组内部进行列式存储。

RCFile格式的表在查询时可以避免读取不必要的列,且同列数据类型一致,有利于数据压缩。

但是,RCFile在重建行数据时可能会有较大的开销,尤其是当数据分布在不同的HDFS块上时。

ORCFile存储格式

ORCFile(Optimized Row Columnar File)是对RCFile的优化,提供了更高效的压缩和查询性能。

ORCFile在每个文件中提供了多级索引,可以快速定位查询数据,减少不必要的磁盘和网络I/O。

ORCFile支持ACID事务,允许对Hive表的单个记录进行修改。

创建支持ACID事务的ORCFile格式的Hive表时,需要将表设置为分桶表,并在表属性中添加'transactional'='true'。

Parquet存储格式

Parquet是另一种高性能的列式存储格式,它将数据分成多个行组,每个行组内部再分成若干页。

Parquet文件中包含了丰富的元数据信息,有助于提升数据读取效率。

Parquet在嵌套式结构支持上表现更佳,而ORC在多层级嵌套表达上可能会有性能损失。

存储格式的选择

在选择Hive存储格式时,需要考虑数据的压缩比、查询速度和HDFS上的文件名。

ORCFile通常提供最高的压缩比,而Parquet和ORCFile在查询速度上相近。

如果表中的数据需要压缩,可以选择SequenceFile、RCFile、ORCFile或Parquet格式。

对于大数据量的场景,选择支持切分的压缩格式如Parquet的Lzo压缩会更加合适。

在实际应用中,可以根据数据的特点和查询需求选择最合适的存储格式。

例如,对于需要频繁查询某几列数据的场景,列式存储格式如ORCFile或Parquet可能更优。

而对于需要经常全表扫描的场景,行式存储格式如TextFile可能更合适。

此外,还可以根据存储和查询的性能需求,对Hive表进行相应的配置优化,如设置压缩类型和大小、调整内存缓冲池大小等1。

Y 推荐文献

[数据存储] 浅谈大数据领域的数据存储格式:ORC / Avro / Parquet / Arrow- 博客园/千千寰宇

X 参考文献