hive文件存储格式

hive文件存储格式

1.textfile
textfile为默认格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 mr无法进行合并和拆分


2.sequencefile
Hadoop API提供的一种二进制文件,以<key,value>的形式序列化到文件中
存储方式:行存储
可分割 压缩
SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。
优势是文件和hadoop api中的mapfile是相互兼容的。


3.rcfile

存储方式:RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。

块数据列式存储,有利于数据压缩和快速的列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势

实践证明RCFile目前没有性能优势, 只有存储上能省10%的空间


4.orc

存储方式:数据按行分块 每块按照列存储

压缩快 快速列存取

效率比rcfile高,是rcfile的改良版本


5.自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式

用户可以通过实现inputformat和outputformat来自定义输入输出格式

> create table test4(str STRING)  
> stored as  
> inputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat'  
> outputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextOutputFormat';  

压缩比

分别采用三种文件格式,压缩方式统一为gzip
存储格式               文件大小
TEXTFILE               21.4GB
SEQUENCEFILE           22.3GB
RCFILE                 18.0GB
数据加载

查询响应

测试1:
数据表wp_product_target包含62个字段,字段类型包含:BIGINT、DOUBLE、STRING。
执行如下两种SQL查询:
方案一,测试整行记录的查询效率
select * from wp_product_target where product_id like '480523%';
方案二,测试特定列的查询效率
select product_id, gmt_create, dw_end_date from wp_product_target where product_id like '480523%';




本文介绍Hadoop系统中Hive数据压缩方案的比较结果及具体压缩方法。

一、压缩方案比较

关于Hadoop HDFS文件的压缩格式选择,我们通过多个真实的Track数据做测试,得出结论如下:

1.  系统的默认压缩编码方式 DefaultCodec 无论在压缩性能上还是压缩比上,都优于GZIP 压缩编码。这一点与网上的一些观点不大一致,网上不少人认为GZIP的压缩比要高一些,估计和Cloudera的封装及我们Track的数据类型有关。

2.  Hive文件的RCFile 的在压缩比,压缩效率,及查询效率上都优于SEQENCE FILE (包括RECORD, BLOCK 级别) 。

3.  所有压缩文件均可以正常解压为TEXT 文件,但比原始文件略大,可能是行列重组造成的。

 

关于压缩文件对于其他组件是适用性如下:

1.  Pig 不支持任何形式的压缩文件。

2.  Impala 目前支持SequenceFile的压缩格式,但还不支持RCFile的压缩格式。

 

综上所述

从压缩及查询的空间和时间性能上来说,DefaultCodeC + RCFile的压缩方式均为最优,但使用该方式,会使得Pig 和Impala 无法使用(Impala的不兼容不确定是否是暂时的)。

而DefaultCodeC+ SequenceFile 在压缩比,查询性能上略差于RCFile (压缩比约 6:5), 但可以支持 Impala实时查询。

 

 

 

推荐方案

 

 采用RCFile 方式压缩历史数据。FackBook全部hive表都用RCFile存数据。

二、局部压缩方法

只需要两步:

1.      创建表时指定压缩方式,默认不压缩,以下为示例:

create external table track_hist(

id bigint, url string, referer string, keyword string, type int, gu_idstring,

…/*此处省略中间部分字段*/ …, string,ext_field10 string)

partitioned by (ds string) stored as RCFile location '/data/share/track_histk' ;

 

2.  插入数据是设定立即压缩

SET hive.exec.compress.output=true;

insert overwrite table track_histpartition(ds='2013-01-01')

select id,url, …/*此处省略中间部分字段*/ …, ext_field10 fromtrackinfo

where ds='2013-01-01';

 

 

三、全局方式,修改属性文件

 

在hive-site.xml中设置:

<property>

 <name>hive.default.fileformat</name>

 <value>RCFile</value>

 <description>Default file format for CREATE TABLE statement.Options are TextFile and SequenceFile. Users can explicitly say CREAT

E TABLE ... STORED AS&lt;TEXTFILE|SEQUENCEFILE&gt; to override</description>

</property>

<property>

 <name>hive.exec.compress.output</name>

 <value>true</value>

 <description> This controls whether the final outputs of a query(to a local/hdfs file or a hive table) is compressed. The compres

sion codec and other options are determinedfrom hadoop config variables mapred.output.compress* </description>

</property>

 

四、注意事项

1、Map阶段输出不进行压缩

2、对输出文本进行处理时不压缩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值