Hive 基础 - 使用压缩
hive 中的数据使用压缩的好处(执行查询时会自动解压):
- 可以节约磁盘的空间,基于文本的压缩率可达 40%+;
- 压缩可以增加吞吐量和性能量(减小载入内存的数据量),但是在压缩和解压过程中会增加 CPU 的开销。所以针对 IO 密集型的 jobs(非计算密集型)可以使用压缩的方式提高性能。
主流的压缩算法
查看集群的支持的压缩算法.
hive -e "set io.compression.codecs"
返回支持的压缩算法
io.compression.codecs=org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.DeflateCodec,
org.apache.hadoop.io.compress.SnappyCodec,
org.apache.hadoop.io.compress.Lz4Codec
常用的压缩算法:
- Snappy
- Gzip
- ZLIB
hive 文件格式
- TEXTFILE: 默认格式,数据不做压缩,磁盘开销大。如需压缩,可使用 Gzip、Bzip2 压缩算法,但是不会对数据进行切分;
- SEQUENCEFILE: 二进制文件,具有使用方便、可分割、可压缩.SequenceFile支持三种压缩选择:NONE,RECORD(压缩率低),BLOCK(常用且压缩性能最好);
- RCFILE: RCFILE 是一种行列存储相结合的存储方式;
- ORCFILE: 0.11 以后出现.
hive 配置压缩
建表时申明文件的存储格式,默认为 TEXTFILE。如使用压缩常使用分块压缩 SEQUENCEFILE。
CREATE TABLE A(
...
)
STORED AS SEQUENCEFILE
数据处理的中间过程和结果使用Snappy算法进行压缩。
-- 任务中间压缩
set hive.exec.compress.intermediate=true;
set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.intermediate.compression.type=BLOCK;
-- map/reduce 输出压缩
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapred.output.compression.type=BLOCK;
压缩测试案例
Hive 原始数据为 119.2G。
压缩算法 | TEXTFILE 格式 | SEQUENCEFILE | RCFILE | ORCFILE |
---|---|---|---|---|
不压缩 | 119.2G | 54.1G | 20.0G | 98G |
Snappy | 30.2G | 23.6G | 13.6G | 27.0G |
Gzip | 18.8G | 14.1G | 不支持 | 15.2 G |
ZLIB | 不支持 | 不支持 | 10.1G | 不支持 |
参考
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论