Hive学习(四):Hive文件存储结构

文件结构

Hive支持多种文件的存储结构,以对应不同的场景,Hive通过在创建表时的sorted as来指定文件结构。

基础知识

对于一张表数据的存储

id name sex 1 张三 男 2 李四 女

行式存储

以一行数据为单位进行连续存储,表现为:

    优势:插入新纪录时,直接在数据尾部添加即可,效率高 劣势:如果在查询时只需要name,也需要加载整行数据,消耗大

列式存储

以一列数据为单位进行连续存储,表现为:

    优势:查询只需要name时,只需要读出连续的name数据即可,效率高 劣势:插入新记录时,需要到每一个列单元后插入新的列数据

类型

TextFile

文本文件,为默认设置,行式存储。不做压缩。可结合压缩软件使用,如Bzip2,查询时Hive自动对其进行解压。磁盘开销大,数据解析开销大。

SequenceFile

二进制序列化文件,行式存储。使用方便,可分割,可压缩,有none, record, block三种压缩方式的选择

    none:不压缩 record:每条记录到文件时都压缩 block:文件大小达到要压缩的块大小时压缩,压缩率更高

RCFile

行列式存储,先按行分为行组,每个组里列式储存,相同的数据不会重复存储

相对于单纯的行存储,能够只读取符合条件的几个行组。

相对于单纯的列存储,如果列数据不在同一个hdfs块上,会进行列重组,而RCFile的列一定在同一个块上,减少了列重组的开销。

ORCFile

Hive推出的优化版RCFile,更高效,它的设计是为了克服其他Hive文件格式的限制。使用ORC文件可以提高Hive读写和处理数据时的性能。

从结构上能看到,ORC在RC的行组基础上,在加上了Index Data和Stripe Footer形成了一个Stripe

    Index Data:每列的最小值和最大值以及每列中的行位置。行索引项提供偏移量,用于在解压缩块中寻找正确的压缩块和字节 Stripe Footer:存了行数和每个列的数据类型。它还包含列级聚合计数、最小值、最大值和总和 File Footer:包含文件中Stripe的列表、每个Stripe的行数和每个列的数据类型。它还包含列级聚合计数、最小值、最大值和总和。

Parquet

列式存储,擅长处理深度嵌套数据,二进制文件,支持非常高效的压缩和编码方案。

经验分享 程序员 微信小程序 职场和发展