Hive的数据压缩介绍及使用

猿人菌 2021-01-22 18:00:59
hive 数据 介绍 压缩 数据压缩


在实际工作当中,hive当中处理的数据,一般都需要经过压缩,前期我们在学习hadoop的时候,已经配置过hadoop的压缩,我们这里的hive也是一样的,可以使用压缩来节省我们的MR处理的网络带宽。

MR支持的压缩编码

压缩格式

工具

算法

文件扩展名

是否可切分

DEFAULT

DEFAULT

.deflate

Gzip

gzip

DEFAULT

.gz

bzip2

bzip2

bzip2

.bz2

LZO

lzop

LZO

.lzo

LZ4

.lz4

Snappy

Snappy

.snappy

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示

压缩格式

对应的编码/解码器

DEFLATE

org.apache.hadoop.io.compress.DefaultCodec

gzip

org.apache.hadoop.io.compress.GzipCodec

bzip2

org.apache.hadoop.io.compress.BZip2Codec

LZO

com.hadoop.compression.lzo.LzopCodec

LZ4

org.apache.hadoop.io.compress.Lz4Codec

Snappy

org.apache.hadoop.io.compress.SnappyCodec

压缩性能的比较

压缩算法

原始文件大小

压缩文件大小

压缩速度

解压速度

gzip

8.3GB

1.8GB

17.5MB/s

58MB/s

bzip2

8.3GB

1.1GB

2.4MB/s

9.5MB/s

LZO

8.3GB

2.9GB

49.3MB/s

74.6MB/s

大家是不是很想知道为什么我把压缩编码格式表中把snappy中标注起来了呢? 先让我们到snappy的开源网站上 http://google.github.io/snappy/

On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

我们可以看到snappy压缩达到了250MB/s,解压达到了500MB/s,这性能直接碾压上面所列举的那几个!所以snappy也常作为企业数据压缩格式!

接着我们来看看如何配置压缩参数?

压缩参数配置

要在Hadoop中启用压缩,可以配置如下参数(mapred-site.xml文件中):

参数

默认值

阶段

建议

io.compression.codecs (在core-site.xml中配置)

org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.Lz4Codec

输入压缩

Hadoop使用文件扩展名判断是否支持某种编解码器

mapreduce.map.output.compress

false

mapper输出

这个参数设为true启用压缩

mapreduce.map.output.compress.codec

org.apache.hadoop.io.compress.DefaultCodec

mapper输出

使用LZO、LZ4或snappy编解码器在此阶段压缩数据

mapreduce.output.fileoutputformat.compress

false

reducer输出

这个参数设为true启用压缩

mapreduce.output.fileoutputformat.compress.codec

org.apache.hadoop.io.compress. DefaultCodec

reducer输出

使用标准工具或者编解码器,如gzip和bzip2

mapreduce.output.fileoutputformat.compress.type

RECORD

reducer输出

SequenceFile输出使用的压缩类型:NONE和BLOCK

开启Map输出阶段压缩

开启map输出阶段压缩可以减少job中map和Reduce task间数据传输量。具体配置如下:

案例实操 <1>开启hive中间传输数据压缩功能 hive (default)>set hive.exec.compress.intermediate=true;

<2>开启mapreduce中map输出压缩功能 hive (default)>set mapreduce.map.output.compress=true;

<3>设置mapreduce中map输出数据的压缩方式 hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

<4>执行查询语句 select count(1) from score;

开启Reduce输出阶段压缩

当Hive将输出写入到表中时,输出内容同样可以进行压缩。属性hive.exec.compress.output控制着这个功能。用户可能需要保持默认设置文件中的默认值false,这样默认的输出就是非压缩的纯文本文件了。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能。

案例实操

<1>开启hive最终输出数据压缩功能 hive (default)>set hive.exec.compress.output=true;

<2>开启mapreduce最终输出数据压缩 hive (default)>set mapreduce.output.fileoutputformat.compress=true;

<3>设置mapreduce最终数据输出压缩方式 hive (default)> set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

<4>设置mapreduce最终数据输出压缩为块压缩 hive(default)>set mapreduce.output.fileoutputformat.compress.type=BLOCK;

<5>测试一下输出结果是否是压缩文件 insert overwrite local directory '/export/servers/snappy' select * from score distribute by s_id sort by s_id desc;

本次的分享就到这里了,喜欢的小伙伴们记得点赞加关注哟(^U^)ノ~YO,后续会带来更多hive的介绍,敬请期待!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[猿人菌]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1778579

  1. K8s命令篇-Kubernetes工作实用命令集结号
  2. K8s command chapter - kubernetes working practical command collection number
  3. Hbase(二)Hbase常用操作
  4. HTTP series - detailed explanation of message structure
  5. Flink 1.12 集成 Hive 之快速入门
  6. MySQL 存储引擎 MyISAM 与 InnoDB 区别
  7. 《算法竞赛入门经典——训练指南》实用数据结构
  8. Practical data structure of "Introduction to algorithm competition classic training guide"
  9. Introduction and use of hive's data compression
  10. Please put away this database interview summary for spring recruitment
  11. Redis:23---info命令总结
  12. Redis:23---info Command summary
  13. Quick start kubernetes (k8s) - resource list
  14. Http Header中到底有些啥?
  15. What's in HTTP header?
  16. Linux commands 4-find, locate
  17. Brief description of Tencent cloud redis console parameters
  18. MySQL 事务隔离级别和多版本并发控制MVCC
  19. 再见,MySQL!性能被 MariaDB 吊打 ?
  20. Regular expression in Java
  21. Linux text processing
  22. MySQL transaction isolation level and multi version concurrency control mvcc
  23. Don't download JDK any more: elasticsearch's first big hole in the domestic arm environment
  24. Getting started with spring boot 2. X: getting started with spring MVC request mapping (@ requestmapping)
  25. Linux foundation day02
  26. Chinese user guide of parallel SSH under Linux
  27. Top of BPF: insight into Linux system and application performance
  28. JQuery level selector (descendant, descendant selector)
  29. Interesting JavaScript - precision loss and implicit type conversion
  30. Database: built in functions of MySQL