hadoop当中支持的压缩算法

简介: hadoop当中支持的压缩算法

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

前面hadoop的版本经过重新编译之后,可以看到hadoop已经支持所有的压缩格式了,剩下的问题就是该如何选择使用这些压缩格式来对MapReduce程序进行压缩

可以使用bin/hadoop checknative 来查看编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包

bin/hadoop checknative

yum install openssl-devel

20191120093628843.png

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

如何开启压缩:

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

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

重点:使用hadoop的snappy压缩来对数据进行压缩

第一步:代码中添加配置

这里通过修改代码的方式来实现数据的压缩

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");

第二步:重新打包测试mr程序

会发现MR运行之后的输出文件都变成了以.snappy的压缩文件

相关文章
|
2月前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
|
2月前
|
算法 JavaScript Java
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
|
2月前
|
算法 测试技术 C#
【状态压缩】【动态规划】【C++算法】691贴纸拼词
【状态压缩】【动态规划】【C++算法】691贴纸拼词
|
1月前
|
分布式计算 算法 Hadoop
Hadoop支持的压缩编码
【6月更文挑战第9天】
30 8
|
1月前
|
存储 分布式计算 算法
Hadoop性能优化数据压缩和编码
【6月更文挑战第8天】
20 6
|
5天前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
13 1
|
5天前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
8 0
|
1月前
|
存储 分布式计算 算法
|
2月前
|
存储 编解码 算法
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
46 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
22 0