Shuffle阶段数据的压缩机制

shuffle阶段,大量的数据从map阶段输出,发送到reduce阶段,这一过程中,可能会涉及到大量的网络IO

输出数据较大时,使用hadoop提供的压缩机制对数据进行压缩,可以指定压缩的方式减少网络传输带宽和存储的消耗

可以对map的输出进行压缩map输出到reduce输入的过程,可以shuffle过程中网络传输的数据量)

可以对reduce的输出结果进行压缩(最终保存到hdfs上的数据,主要是减少占用HDFS存储)

1.1. hadoop当中支持的压缩算法

使用hadoop checknative来查看hadoop支持的各种压缩算法,如果出现opensslfalse,那么就在线安装一下依赖包。

 

hadoop支持的压缩算法

压缩格式

工具

算法

文件扩展名

是否可切分

DEFLATE

DEFLATE

.deflate

Gzip

gzip

DEFLATE

.gz

bzip2

bzip2

bzip2

bz2

LZO

lzop

LZO

.lzo

LZ4

LZ4

.lz4

Snappy

Snappy

.snappy

 

各种压缩算法对应使用的java

压缩格式

对应使用的java

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

 

方式一:在代码中进行设置压缩

设置map阶段的压缩

Configuration configuration = new Configuration();

configuration.set("mapreduce.map.output.compress","true");

configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");

 

设置reduce阶段的压缩

configuration.set("mapreduce.output.fileoutputformat.compress","true");

configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");

configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");

 

方式二:配置全局的MapReduce压缩

我们可以修改mapred-site.xml配置文件,然后重启集群,以便对所有的mapreduce任务进行压缩。

map输出数据进行压缩

<property>

<name>mapreduce.map.output.compress</name>

<value>true</value>

</property>

<property>

<name>mapreduce.map.output.compress.codec</name>

<value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

reduce输出数据进行压缩

<property><name>mapreduce.output.fileoutputformat.compress</name>

       <value>true</value>

</property>

<property><name>mapreduce.output.fileoutputformat.compress.type</name>

<value>RECORD</value>

</property>

 <property><name>mapreduce.output.fileoutputformat.compress.codec</name>

<value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>

所有节点都要修改mapred-site.xml,修改完成之后记得重启集群

 

 

 



posted @ 2019-09-14 20:50  DaBai的黑屋  阅读(249)  评论(0编辑  收藏  举报
Live2D