Hive的三种存储格式

来源:互联网 发布:刘易斯汉密尔顿 知乎 编辑:程序博客网 时间:2024/06/07 23:50
        准确的来说,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;  --指定输出压缩格式为Gzipset io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  SET mapred.output.compression.type=BLOCK; --指定为Blockinsert 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
原创粉丝点击