Hive 10. 压缩存储

本文为翻译,源网页地址 https://cwiki.apache.org/confluence/display/Hive/CompressedStorage
仅限交流使用

压缩存储

Henvealf/译

在 Hive 的表中保持数据压缩,在一些情况下,能够比未压缩存储获得更好的效果,比如在磁盘利用率与查询性能上。

你能直接往存储为 TextFile 的表中导入使用了 Gzip 或者 BZip2 格式压缩的文本文件。Hive 会自动检测压缩格式并且直到查询执行时对文件进行解压。一个栗子:

Create Table raw(line String)
    Row Format Delimited 
    Fields Terminated By '\t' 
    Lines Terminated By '\n';

Load Data Local InPath '/tmp/weblogs/20090603-access.log.gz' Into Table raw;

表’raw’被存储为默认的存储格式TextFile。然而在这个例子中,Hadoop 就切分不了你的文件了,以至于他们不会被放进 chunks/block 中,然后就不能在多个 map 中并发运行。这将会造成你不能充分利用你集群上的 mapping 能力。

所以推荐的方式是将数据插入另一个以 SequenceFile 格式存储的表中。一个 SequenceFile 可以被 Hadoop 切分,并且分发到 map job 中。GZIP 文件做不到这些的。

Create Table raw(line String)
    Row Format Delimited 
    Fields Terminated By '\t' 
    Lines Terminated By '\n';

Create Table raw_sequence (line String)
    Stored As SequenceFile;

Load Data Local InPath '/tmp/weblogs/20090603-access.log.gz' Into Table raw;

Set hive.exec.compress.output=true;
Set io.seqfile.compression.type=BLOCK;  -- NONE/RECORD/BLOCK(看下面)

Insert OverWrite Table raw_sequence Select * From raw;

hive.exec.compress.output :控制hive的查询结果输出是否进行压缩,压缩方式在hadoop的mapred.output.compress中配置,默认不压缩false;

io.seqfile.compression.type 的值决定了压缩如何的执行的。
Record(默认)意思是记录级别的压缩,在执行压缩之前,当 BLOCK 缓冲超过了 1MB(默认), 就逐个的压缩每一个值(有些不懂).

Block 即是块级别的压缩。性能最好,而且可以分割。


End!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值