hadoop中的文件压缩

本文探讨了在大数据中使用压缩的原因,如减少存储空间和IO,加快数据传输,并对比了几种常见的压缩方式,包括Snappy、LZ4、LZO、GZIP和BZIP2。还详细介绍了如何配置Hadoop中的Snappy压缩,建议在代码中按需配置以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大数据中为什么要使用压缩

1 减少磁盘的存储空间

2 减少磁盘IO和网络IO

3 加快数据传输速度(磁盘和网络),如果小文件多明显文件传输会明显降低

 

怎么选一个压缩方式,需要考虑的是什么?

1 考虑文件的压缩效率------》压缩快慢

2 考虑文件的压缩比----------》解压快慢

第一点好理解,压缩的快肯定好

第二点是压缩比,举例现在有一个10G的文件,一种压缩算法能把他压缩成1G,其他压缩算法能把他压缩成3到6G,不能看到压缩到1G的就是最好的。压缩的文件如果需要使用的,使用的一定需要先解压,压缩比这么高,解压的时候就会把CPU拉的特别高,解压也会很慢,所以还要考虑文件的解压速度,服务器的cpu能不能支持。

压缩技术:

    压缩有两种:无损压缩(Lossless Compression) 和 有损压缩  (lossy Compression),从英文名上应该更准确一些。

   无损压缩一般适用于对数据要求比较高,不允许丢失的场景,我们的大数据选这种;

  有损压缩一般适用于图片和视频的文件的处理

几种常见的压缩方式对比:

         

          压缩比:Snappy<LZ4<LZO<GZIP<BZIP2

     

压缩格式压缩工具算法文件后缀支持分割优点缺点
gzipgzipdefault.gz解压缩速度较好,系统支持好不支持split
bzipbzipbzip2.bz2压缩比高解压缩慢
LZOLZOLZO.lzo解压缩快压缩率相比较低
LZ4LZ4LZ4.lz4解压缩速度快压缩比低,不支持split
snappyN/Asnappy.snappy解压缩最快,支持hadoop native库压缩比最低,需要重新编译hadoop,不支持split

怎么配置snapy的压缩方式

hadoop 是不自带snapy的压缩的,需要重新编译hadoop。

编译成功后,工程中如果想使用snapy压缩方式的话有以下两种方法:

方法1 全局的配置   全部节点的mapred-site.xml配置

<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>

配置修改完一定要重新重启集群

 

第2种  在代码中配置,可在run方法中配置  map  和reduce 都要配置

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

 

推荐使用第二种配置,因为有些文件不需要压缩,在全局配置文件的配置可能并不需要

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值