Hive 四种文件存储格式

Hive的文件存储格式:

textFile

默认格式

1)存储方式:行存储
2)缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分

存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高

sequencefile

1)二进制文件,以键值对<key,value>的形式序列化到文件中
2)存储方式:行存储
3)优点:可分割、压缩,一般选择block压缩,与hadoop api中的mapfile是互相兼容的。

存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载

Rcfile

RCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,正是先水平划分,再垂直划分的理念。

如下图是HDFS内RCFile的存储结构,我们可以看到,首先对表进行行划分,分成多个行组。一个行组主要包括:16字节的HDFS同步块信息,主要是为了区分一个HDFS块上的相邻行组;元数据的头部信息主要包括该行组内的存储的行数、列的字段信息等等;数据部分我们可以看出RCFile将每一行,存储为一列,将一列存储为一行,因为当表很大,我们的字段很多的时候,我们往往只需要取出固定的一列就可以。

在这里插入图片描述

1)存储方式:数据按行分块 每块按照列存储
2)优点
a. 压缩快 快速列存取
b. 读记录尽量涉及到的block最少
c. 读取需要的列只需要读取每个row group 的头部定义。
d. 读取全量数据的操作 性能可能比sequencefile没有明显的优势

在这里插入图片描述

在一般的列存储中,会将不同的列分开存储,这样在查询的时候会跳过某些列,但是有时候存在一个表的有些列不在同一个HDFS块上(如下图),所以在查询的时候,Hive重组列的过程会浪费很多IO开销。 而RCFile由于相同的列都是在一个HDFS块上,所以相对列存储而言会节省很多资源。

ORCfile

ORC是在一定程度上扩展了RCFile,是对RCFile的优化。

在这里插入图片描述
根据结构图,我们可以看到ORCFile在RCFile基础上引申出来Stripe和Footer等。每个ORC文件首先会被横向切分成多个Stripe,而每个Stripe内部以列存储,所有的列存储在一个文件中,而且每个stripe默认的大小是250MB,相对于RCFile默认的行组大小是4MB,所以比RCFile更高效。

Hive读取数据的时候,根据FileFooter读出Stripe的信息,根据IndexData读出数据的偏移量从而读取出数据。
在这里插入图片描述

存储空间上

ORCFile扩展了RCFile的压缩,除了Run-length(游程编码),引入了字典编码和Bit编码。
采用字典编码,最后存储的数据便是
字典中的值,每个字典值得长度以及字段在字典中的位置

至于Bit编码,对所有字段都可采用Bit编码来判断该列是否为null,
如果为null则Bit值存为0,否则存为1,对于为null的字段在实际编码的时候不需要存储,也就是说字段若为null,是不占用存储空间的。

总结

对于ORC对rcfile的优化,我大概是这么理解的:

1)存储方式上:ORCfile和rcfile同样是先按行划分,再按列存储。只不过ORC在RCFile基础上引申出来Stripe和Footer的概念。每次查数据先查footer,查到是哪个Stripe,进入Stripe再从其中的index Data来查询数据的具体位置。查询效率高了。

2)压缩方式上:增加了编码方式,Bit编码中字段为null的时候可以不占用存储空间

对于这四种:

1)text默认,最方便。但是如果要压缩的话,就没办法拆分了,因此sequencefile可以支持压缩拆分。

2)上述两种都是行存储,因此后面两种都是针对列存储的。ORC又对rc进行了优化

大致的过程是这样的

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值