2021年大数据Hive(九):Hive的数据压缩

1,438 阅读6分钟

全网最详细的大数据Hive文章系列,强烈建议收藏加关注!

新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。

目录

系列历史文章

前言

Hive的数据压缩

一、MR支持的压缩编码

二、压缩配置参数

三、开启Map输出阶段压缩

1、开启hive中间传输数据压缩功能

2、开启mapreduce中map输出压缩功能

3、设置mapreduce中map输出数据的压缩方式

4、执行查询语句

四、开启Reduce输出阶段压缩

1、开启hive最终输出数据压缩功能

2、开启mapreduce最终输出数据压缩

3、设置mapreduce最终数据输出压缩方式

4、设置mapreduce最终数据输出压缩为块压缩

5、测试一下输出结果是否是压缩文件


系列历史文章

2021年大数据Hive(十二):Hive综合案例!!!

2021年大数据Hive(十一):Hive调优

2021年大数据Hive(十):Hive的数据存储格式

2021年大数据Hive(九):Hive的数据压缩

2021年大数据Hive(八):Hive自定义函数

2021年大数据Hive(七):Hive的开窗函数

2021年大数据Hive(六):Hive的表生成函数

2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)

2021年大数据Hive(四):Hive查询语法

2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

2021年大数据Hive(二):Hive的三种安装模式和MySQL搭配使用

2021年大数据Hive(一):Hive基本概念

前言

 2021大数据领域优质创作 博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习。

有对大数据感兴趣的可以关注微信公众号:三帮大数据

Hive的数据压缩

在实际工作当中,hive当中处理的数据,一般都需要经过压缩,可以使用压缩来节省我们的MR处理的网络带宽

一、MR支持的压缩编码

压缩格式工具算法文件扩展名是否可切分
DEFAULTDEFAULT.deflate
GzipgzipDEFAULT.gz
bzip2bzip2bzip2.bz2
LZOlzopLZO.lzo
LZ4LZ4.lz4
SnappySnappy.snappy

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

压缩格式对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
LZ4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

压缩性能的比较

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

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.

二、压缩配置 参数

要在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.compressfalsemapper输出这个参数设为true启用压缩
mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.DefaultCodecmapper输出使用LZO、LZ4或snappy编解码器在此阶段压缩数据
mapreduce.output.fileoutputformat.compressfalsereducer输出这个参数设为true启用压缩
mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress. DefaultCodecreducer输出使用标准工具或者编解码器,如gzip和bzip2
mapreduce.output.fileoutputformat.compress.typeRECORDreducer输出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(1from score;

四、开启 Reduce输出阶段压缩

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

案例实操:

1、开启hive最终输出数据压缩功能

set hive.exec.compress.output=true;

2、开启mapreduce最终输出数据压缩

set mapreduce.output.fileoutputformat.compress=true;

3、设置mapreduce最终数据输出压缩方式

set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

4、设置mapreduce最终数据输出压缩为块压缩

set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5、测试一下输出结果是否是压缩文件

insert overwrite local directory '/export/data/exporthive/compress' select * from score distribute by sid sort by sscore desc;

  • 📢博客主页:lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨