Hive 压缩种类介绍 常用压缩参数 hive.exec.compression.intermediate 中间压缩 压缩优化

参考书籍:《Hive编程指南》

1.Hive压缩

压缩能节约磁盘空间,还能增加吞吐量和性能。但是压缩/解压会增加额外的CPU开销,不过,通过减少载入内存的数据量而提高I/O吞吐量会更加提高网络传输性能。

Hadoop的job通常是I/O密集型而不是CPU密集型的。如果是这样的话,压缩可以提高性能。不过如果用户的job是CPU密集型的话,那么使用压缩可能会降低执行性能。确定是否进行压缩的唯一方法就是尝试不同的选择,并测量对比执行结果。

2.常见压缩格式的性能

压缩方式压缩率压缩/解压速度是否可分割
Gzip
BZip2
Snappy
LZO
Zlib

分析:

BZip2压缩率最高,但是需要消耗最多的CPU,且压缩/解压速度慢。

GZip是压缩率和压缩/解压速度都是中等。

LZO和Snappy压缩率相比前面两个要小,但是压缩和解压很快。

3.Hive常用的压缩参数

(1)查看Hive支持的压缩算法

set io.compression.codecs;

结果:
io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec 

(2)开启中间压缩

对中间数据进行压缩可以减少job中map和reduce task的数据传输量。对于中间数据压缩,选择一个低CPU开销的编/解码器要比选择一个压缩率高的编/解码器要重要,用户可以在查询语句或者脚本中设置这个值

set hive.exec.compression.intermediate=true;

开启中间压缩建议配合Snappy压缩

Snappy结合了低CPU开销和好的压缩执行效率,适合中间文件的压缩和解压

set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

提示:

对于其他的Hadoop job(MapReduce等)来说控制中间数据压缩的参数是mapred.compress.map.output.

(3)最终输出结果压缩

当Hive将输入写入到表中时,设置下列参数使输出内容压缩。用户可以在查询语句或者脚本中设置这个值

set hive.exec.compress.output=true;

提示:

对于其他的Hadoop job(MapReduce等)来说控制最终输出结果压缩功能的参数是mapred.output.compress

(4)Gzip压缩测试

# 创建测试表 

create table inventory_compress(
     inv_date_sk     int,
     inv_item_sk     int,
     inv_warehouse_sk     int,
     inv_quantity_on_hand     int
)
row format delimited fields terminated by '|' 
stored as textfile;

# 开启压缩

set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set hive.exec.compress.output=true;

# 开启压缩之后,使用insert进行数据导入(inventory为测试表已经存在)

insert overwrite table inventory_compress
select * from inventory;

# 查看压缩之后的数据

hdfs dfs -ls /warehouse/tablespace/managed/hive/testdb/inventory_compress/base_0000001

结果:
/warehouse/tablespace/managed/hive/test.db/inventory_compress/base_0000001/000000_0.gz

文件已经是压缩成功了。

(5)SET TBLPROPERTIES(orc ZLIB压缩)

create table inventory_compress(
     inv_date_sk     int,
     inv_item_sk     int,
     inv_warehouse_sk     int,
     inv_quantity_on_hand     int
)
row format delimited fields terminated by '|' 
stored as orc;

-- 使用SET TBLPROPERTIES方式
ALTER TABLE inventory_compress SET TBLPROPERTIES('orc.bloom.filter.columns'='*','orc.compress'='ZLIB');

4.压缩调优总结

(1)如果磁盘空间利用率和I/O开销优先级高的话,选择BZip2和GZip。

(2)频繁读取数据所需的解压缩速度优先级高的话,选择LZO和Snappy。

(3)中间数据多的时候,选择开启中间数据压缩,压缩格式选择Snappy。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值