MapReduce(5)--MapReduce shuffle阶段数据的压缩机制

在shuffle阶段,可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多。

文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输

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

常见的压缩速率比较

压缩算法

原始文件大小

压缩后的文件大小

压缩速度

解压缩速度

gzip

8.3GB

1.8GB

17.5MB/s

58MB/s

bzip2

8.3GB

1.1GB

2.4MB/s

9.5MB/s

LZO-bset

8.3GB

2GB

4MB/s

60.6MB/s

LZO

8.3GB

2.9GB

49.3MB/S

74.6MB/s

snappy比以上压缩算法都要快。

如何开启压缩:

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

在driver里面添加!!!

设置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修改完成之后记得重启集群

发布了80 篇原创文章 · 获赞 168 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_44036154/article/details/103132608