Hive的三种存储格式

        准确的来说,Hive是一个将Hive SQL的解释、编译成Hadoop MapReduce任务的工具。数据存储在Hdfs上,默认支持三种文件格式:TEXTFILE、SEQUENCEFILE、RCFILE(允许自定义格式)。
其中TEXTFILE和SEQUENCEFILE都是基于行存储的,RCFILE基于行列混合存储(按行把数据分成多个row group,在row group中对每个列分别进行存储)。
        基于HDFS的行存储,同一条记录的所有域都在同一个集群节点,所以具备快速数据加载和动态负载的高适应能力。但在仅针对少数几列进行查询时,不能路过不需要的列,直接定位到所需列,所以不太满足快速的响应查询。
同时由于数据表中包含不同类型,行存储不易获得一个较高的压缩比。RCFILE是基于SEQUENCEFILE实现的列存储格式,既满足了快速数据加载和动态负载高适应需求,也解决了SEQUENCEFILE的一些瓶颈。

TEXTFILE
Hive默认的数据格式,数据不做压缩,磁盘开销大,数据解析开销大。
可使用Gzip、Bzip2等压缩算法压缩,压缩后无法对数据进行切分。
反序列开销大,需要对逐个字符判断是不是分隔符和行结束符。

--创建数据表:
drop table if exists textfile_table;
create table if not exists textfile_table(
a string,
b string,
c bigint,
c string) comment '表描述信息'
row format delimited fields terminated by '\001' stored as textfile;
--插入数据:
set hive.exec.compress.output=true; --启用压缩格式 
set mapred.output.compress=true;    
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  --指定输出的压缩格式为Gzip  
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;      
insert overwrite table textfile_table select * from T_Name;

SEQUENCEFILE
Hadoop API提供的一种二进制文件,以<Key,Value>的形式序列化到文件中。
这种二进制文件内部使用Hadoop的标准的Writable接口实现序列化和反序列化。它和Hadoop API中的MapFile是互相兼容的。
支持Record和Block压缩,其中Block压缩率更高。

--创建数据表:
drop table if exists seqfile_table;
create table if not exists seqfile_table(
a string,
b string,
c bigint,
c string) comment '表描述信息'
row format delimited fields terminated by '\001' stored as sequencefile;
--插入数据操作:
set hive.exec.compress.output=true;  --启用输出压缩格式
set mapred.output.compress=true;  
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  --指定输出压缩格式为Gzip
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
SET mapred.output.compression.type=BLOCK; --指定为Block
insert overwrite table seqfile_table select * from T_Name;


RCFILE
数据先按列划分,再垂直划分。结合了行存储和列存储的优点:
RCFILE保证同一行的数据位于同一节点,因此元组重构的开销低。
能够利用列维度的数据压缩,并且能路过不必要的列读取。
改良版本:ORCFILE,效率更高。

--创建数据表:
drop table if exists rcfile_table;
create table if not exists rcfile_table(
a string,
b string,
c bigint,
c string) comment '表描述信息'
row format delimited fields terminated by '\001' stored as rcfile;
--插入数据操作:
set hive.exec.compress.output=true;  
set mapred.output.compress=true;  
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
insert overwrite table rcfile_table select * from T_Name;


三种数据格式比较
1、TextFile 默认格式,加载速度最快,可以采用Gzip、bzip2等进行压缩,压缩后的文件无法split,即并行处理
2、SequenceFile 压缩率最低,查询速度一般,三种压缩格式NONE,RECORD,BLOCK
3、RCfile 压缩率最高,查询速度最快,数据加载最慢。

参考:
http://blog.csdn.net/czw698/article/details/8107888
http://www.cnblogs.com/skyl/p/4740301.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值