一、MapReduce的压缩方式的介绍
压缩compress:目的是为了压缩map输出的 结果数据,减少网络IO和磁盘IO流
常见的压缩算法:Snappy、Lz4,Lzo
配置压缩:MapReduce ,配置 map端的输出有压缩
mapreduce.map.output.compress = true
mapreduce.map.output.compress.codec="org.apache.hadoop.io.compress.Lz4Codec"
三种方式:
1. 可以通过配置mapred-site.xml文件:
mapreduce.map.output.compress = true
mapreduce.map.output.compress.codec="org.apache.hadoop.io.compress.Lz4Codec"
![](https://i-blog.csdnimg.cn/blog_migrate/d82a3accdd56d8c29dcae494e476be85.png)
2.配置MapReduce程序中的configuration中设置。
3. 可以通过提交任务时,bin/hdfs jar xxx.jar sourcefile outputfile –D (后面跟压缩方式)
二、Hive的压缩方式的介绍
对于Hive话,怎么配置呢?
有两种方式进行设置:
1.在命令行:
sethive.exec.compress.intermediate=true;
setmapreduce.map.output.compress=true;
setmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/4e054a041f9e3c9a627ec626567f23e3.png)
执行之后的结果(这几种都可以。这里只截一个的图)在UI界面查看,主机名+端口号50070
![](https://i-blog.csdnimg.cn/blog_migrate/fb89c1607eabec268865f28cf97e5097.png)
压缩后的数据—以字节算
![](https://i-blog.csdnimg.cn/blog_migrate/5843c4d1dc0a4f7611a2693b046474bf.png)
比较下面各种压缩方式,
压缩方式 | 结果 |
不压缩 | 2083838
|
org.apache.hadoop.io.compress.Lz4Codec | 1230428
|
org.apache.hadoop.io.compress.SnappyCodec | 1201217
|
org.apache.hadoop.io.compress.BZip2Codec | 731133
|
比较以上几种压缩方式,我们一般选择lz4以及snappy、lzo这三种压缩方式,bzip2压缩太多,解压时也需要花费时间和CPU。所以选择前三种是最好的压缩刚好一半。
针对MapReduce程序 map out 数据进行压缩配置,将对应的配置写到*-site.xml文件中,对所有MapReduce程序和HiveQL都是用压缩,配置mapred-site.xml
setmapreduce.map.output.compress=true;
setmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
以及hive-site.xml
set hive.exec.compress.intermediate=true;
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/242c0c78611ab4e6fa1c19a9ba915fa4.png)
配置xml文件是长期有效的压缩方式,通过命令配置的话是当前会话有效。