Hive存储格式

Hive的四种存储格式;TextFile、SequenceFile、RCFile、Parquet

  • 基于行存储:TextFile和SequenceFile
  • 基于列存储:Parquet
  • 基于行列混合的思想:RCFile——先按行把数据划分成N个row group,在row group中对每个列分别进行存储

列式存储和行式存储的比较

 

 

优点

缺点
行式存储一行数据是一条记录,放在同一个block块中只查询几个列时,也会读取整行的数据,当数据量大时,影响性能
 方便进行insert/update操作不同类型的数据放在同一个block中,导致不容易获得一个极高的压缩比,也就是空间利用率不高
  不是所有的列都适合作为索引
列式存储查询时只有涉及到的列才会被查询insert/update不方便
 同类型数据存放在同一个block块里面,压缩性能好,节省存储空间、计算内存和cpu不适合扫描数据量小的数据
 任何列都可以作为索引查询全表时需要数据重组

 

 

 

 

 


 

 

 

 

TextFile

       Hive默认格式,数据不做压缩,磁盘开销大,数据解析开销大

 

SequenceFile

       SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部       使用Hadoop 的标准的Writable 接口实现序列化和反序列化。

 

RCFile

       RCFile是Hive推出的一种专门面向列的数据格式。 它遵循“先按列划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。需要说明的是,RCFile在map阶段从 远端拷贝仍然是拷贝整个数据块,并且拷贝到本地目录后RCFile并不是真正直接跳过不需要的列,并跳到需要读取的列, 而是通过扫描每一个row group的头部定义来实现的,但是在整个HDFS Block 级别的头部并没有定义每个列从哪个row group起始到哪个row group结束。所以在读取所有列的情况下,RCFile的性能反而没有SequenceFile高。

 

Parquet

     Parquet是不跟任何数据处理技术绑定在一起的,可以用于多种数据处理框架

 

hive的数据存储 
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等) 
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。 
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。 
db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹 
table:在hdfs中表现所属db目录下一个文件夹 
external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径 
普通表: 删除表后, hdfs上的文件都删了 
External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了 
partition:在hdfs中表现为table目录下的子目录 
bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值