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
Hive是一种用于在大数据环境中进行查询和分析的开源数据仓库解决方案。在Hive中,选择合适的存储格式对于查询性能和数据存储优化非常重要。 Hive支持多种存储格式,包括文本格式、序列文件格式、ORC格式和Parquet格式等。不同的存储格式对于数据的存储效率、压缩率和查询性能都有一定影响。 首先,文本格式是最基本的存储格式,它简单易用,但是不适合大规模数据存储和查询,因为它没有压缩和索引功能,查询性能会受到限制。 其次,序列文件格式是Hadoop默认的文件格式,它支持压缩和可切分,能够提高存储空间利用率和查询性能。 ORC(Optimized Rowe Columnar)格式是一种基于列式存储的高效存储格式,它能够提供更好的压缩比和查询性能,尤其适用于大规模数据仓库中的分析查询工作负载。 最后,Parquet格式也是一种列式存储格式,它具有更好的查询性能和压缩比,支持高级查询和分析操作。 在选择存储格式时,需要综合考虑数据类型、数据量、查询性能和存储空间等因素。如果数据量较小,可以选择文本格式或序列文件格式;对于大规模数据存储和分析场景,推荐选择ORC或Parquet格式。 此外,可以通过调整Hive的配置参数来进一步优化存储格式的选择,如选择适当的压缩算法、压缩级别和数据切分方式等。通过合理选择和配置存储格式,可以提高Hive查询性能、降低存储成本,并获得更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值