广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Hadoop中的压缩与解压缩案例详解
  • 845
分享到

Hadoop中的压缩与解压缩案例详解

2024-04-02 19:04:59 845人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一:压缩的作用1.1:压缩的原则:1.2:MR支持的压缩编码1.3:压缩性能的比较1.4:压缩方式的选择压缩可以在mapReduce作用的任意阶段启用。 二:MapReduce数

压缩主要关注点:压缩率,压缩速度,解压速度,是否可切片

一:压缩的作用

压缩技术能够减少底层hdfs读写字节数,减少磁盘io,提升网络传输效率,因为磁盘IO和网络带宽是hadoop的宝贵资源;特别是在运行MR程序时,I/O,网络数据传输,shuffle及Merge都要花大量的时间,因此压缩非常重要; 压缩是提升Hadoop运行效率的一种优化策略,使用得当可以提升效率,但是使用不当也可能降低效率

1.1:压缩的原则:

1、计算(运算)密集型任务:大量使用CPU去做数学运算,此时少用压缩
2、IO密集型任务:此时多用压缩         压缩需要消耗CPU资源

1.2:MR支持的压缩编码

DEFLATE                                                不支持切分

Gzip                                                         不支持切分

bzip2                                                         支持切分

LZO                非hadoop自带 安装           支持切分

Snappy                                                    不支持切分

为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器

  • org.apache.hadoop.io.compress.DefaultCodec
  • org.apache.hadoop.io.compress.GzipCodec
  • org.apache.hadoop.io.compress.BZip2Codec
  • com.hadoop.compression.lzo.LzopCodec
  • org.apache.hadoop.io.compress.SnappyCodec

1.3:压缩性能的比较

1.4:压缩方式的选择

1.4.1Gzip压缩

优点:压缩/解压缩比较快,处理Gzip格式文件和直接处理文本一样

缺点:不支持split

应用场景:

        当每个文件压缩之后在130M以内(1个块大小内),考虑。

1.4.2:Bzip2压缩

优点:比Gzip压缩率高,支持split

缺点:压缩/解压速度慢

应用场景:适合对速度要求不高,但需要较高的压缩率  

                   或者输出数据比较大,处理之后的数据需要压缩存档,同时对单个很大的文本文件像压缩减少存储空间,同时需支持split;

1.4.3LZO压缩

优点:压缩/解压缩比较快,合理的压缩率,支持split,是Hadoop最流行的压缩格式,在linux系统下需要安装

缺点:压缩率比Gzip低一些,Hadoop本身不支持,为了支持split需要建立索引,还需要指定InputFORMat为Lzo格式

应用场景:一个很大的文本文件,压缩之后还大于200M以上可以考虑,而且单个文件越大,LZO优点越明显;

1.4.4Snappy压缩

优点: 压缩速度和合理的压缩率

缺点:不支持split,压缩率比gzip低,Hadoop本身不支持需要安装

应用场景:当MapReduce作业的Map输出的数据比较大的时候,作为Map到Reduce的 中间数据的压缩格式,或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入。

压缩可以在MapReduce作用的任意阶段启用。

 二:MapReduce数据压缩

Map之前的输入端压缩 :(Hadoop自动检查文件扩展名如果扩展名能够匹配就会使用恰当的编解码方式对文件进行压缩和解压)

Mapper输出采用压缩:(可有效改善shuffle过程,此过程是资源消耗最多的环节)

注:(LZO是Hadoop通用的编解码器,其设计目标是达到与硬盘读取速度相当的压缩速度,因此速度是优先考虑的因素,其次是压缩率,LZO的压缩速度是Gzip的5倍,解压速度是Gzip的2倍)

Reducer输出压缩:压缩技术能够减少要存储的数据量,将i磁盘空间。

三:压缩的参数配置

io.compression.codecs   (在core-site.xml中配置)  (map输入前)

mapreduce.map.output.compress(在mapred-site.xml中配置)  (map到reduce)

mapreduce.map.output.compress.codec(在mapred-site.xml中配置)

mapreduce.output.fileoutputformat.compress(在mapred-site.xml中配置)(reduce输出)

mapreduce.output.fileoutputformat.compress.codec(在mapred-site.xml中配置)

mapreduce.output.fileoutputformat.compress.type(在mapred-site.xml中配置)

如果压缩写到了配置文件中则,所有都会进行压缩,如果只是写到了当前程序中,只对当前程序起作用。

3.1:设置reduce输出端的压缩格式

//设置Reduced端输出压缩
FileOutputFormat.setCompressOutput(job,true);
//压缩的结果是BZip2Codec
FileOutputFormat.setOutputCompressorClass(job,BZip2Codec.class);
FileOutputFormat.setOutputCompressorClass(job, SnappyCodec.class);

3.2:设置map输入的压缩方式

//开启map输出压缩
conf.setBoolean("mapreduce.map.output.compress",true);
conf.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);

四:文件的压缩与解压缩案例


public class FileCompress {
    public static void main(String[] args) throws IOException {
        //压缩传入两个参数 path  以及压缩格式
//        compress("E:\\a.txt","org.apache.hadoop.io.compress.BZip2Codec");
 
        decompress("E:\\a.txt.bz2");
 
    }
 
    private static void decompress(String path) throws IOException {
        //1:校验是否能解压    CompressionCodecFactory     A factory that will find the correct codec for a given filename.
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        //This class encapsulates a streaming compression/decompression pair.
        CompressionCodec codec = factory.getCodec(new Path(path));
        if (codec == null){
            System.out.println("cannot find codec for file " + path);
            return;
        }
        //2 获取普通输入流,再获取解压输入流
        FileInputStream fis = new FileInputStream(new File(path));
        //允许客户端 重新定义输入流
        CompressionInputStream cis = codec.createInputStream(fis);
        //3:获取输出流
        FileOutputStream fos = new FileOutputStream(new File(path + ".decodec"));
 
        //4 将压缩输入流写入输出流
        IOUtils.copyBytes(cis , fos, new Configuration());
        //5:关闭资源
        IOUtils.closeStream(fos);
        IOUtils.closeStream(cis);
        IOUtils.closeStream(fis);
 
    }
 
    private static void compress(String path, String method) throws IOException {
        //1:获取输入流
        FileInputStream fis = new FileInputStream(path);
        //2:获取压缩编码器   编解码器就是算吗
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        CompressionCodec codec = factory.getCodecByName(method);
        //3:获取普通输出流,获取压缩输出流     获取编码器的扩展名
        FileOutputStream fos = new FileOutputStream(new File(path + codec.getDefaultExtension()));
        CompressionOutputStream cos = codec.createOutputStream(fos);
        //4:赋值输入流到流输出流
        IOUtils.copyBytes(fis,cos,new Configuration());
        //5 关闭资源
        IOUtils.closeStream(cos);
        IOUtils.closeStream(fos);
        IOUtils.closeStream(fis);
 
    }
}

到此这篇关于Hadoop中的压缩的文章就介绍到这了,更多相关Hadoop压缩内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Hadoop中的压缩与解压缩案例详解

本文链接: https://www.lsjlt.com/news/158991.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hadoop中的压缩与解压缩案例详解
    目录一:压缩的作用1.1:压缩的原则:1.2:MR支持的压缩编码1.3:压缩性能的比较1.4:压缩方式的选择压缩可以在MapReduce作用的任意阶段启用。 二:MapReduce数...
    99+
    2022-11-12
  • Hadoop中的压缩与解压缩方法是什么
    这篇文章主要介绍“Hadoop中的压缩与解压缩方法是什么”,在日常操作中,相信很多人在Hadoop中的压缩与解压缩方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hadoop中的压缩与解压缩方法是什么...
    99+
    2023-06-21
  • ZIP4j 压缩与解压的实例详解
    ZIP4j 压缩与解压的实例详解使用的jar包:zip4j_1.3.2.jar 基本功能: 针对ZIP压缩文件创建、添加、分卷、更新和移除文件 (读写有密码保护的Zip文件) (支持AES 128/256算法加密) (支持标准Zip算法加密...
    99+
    2023-05-31
    zip4j 压缩 解压
  • PHP压缩与解压缩类的示例分析
    这篇文章给大家分享的是有关PHP压缩与解压缩类的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP压缩与解压缩类PclZip是一个很强大的压缩与解压缩zip文件的PHP...
    99+
    2022-10-19
  • tar 打包压缩与解压缩
            tar 命令用于对文件进行打包压缩或解压缩。         在Linux系统中,常见的压缩包文件格式有很多,其中主要使用的是 .tar 或 .tar.gz 或 .tar.bz2 的格式。         1、tar 命令的...
    99+
    2023-10-09
    linux 服务器 运维 centos bash
  • Linux下常用压缩格式的压缩与解压方法详解
    .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) -----------------------------...
    99+
    2022-06-03
    linux 压缩格式 linux压缩与解压
  • Linux下的压缩解压缩命令详解
    linux zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. unzip unzip -o -d /home/sunny myfil...
    99+
    2023-10-27
    linux 服务器 运维
  • Linux下压缩与解压命令详解
    本文为大家分享了Linux下压缩与解压缩命令,供大家参考,具体内容如下 【tar命令】 解压:tar -zxvf FileName.tar 压缩:tar -czvf FileName.tar DirName...
    99+
    2022-06-04
    详解 命令 Linux
  • Java压缩与解压缩ZIP文件
    文章目录 前言Java解压缩文件压缩和解压缩ZIP文件检验应用总结 前言 在现代计算机上,数据传输和存储越来越依赖于文件压缩技术。当我们需要发送大量数据时,压缩文件可以大大减少传输时间...
    99+
    2023-09-11
    java zip 压缩文件 解压缩文件 ZipOutputStream
  • CentOS中zip压缩和unzip解压缩命令详解
    以下命令均在/home目录下操作cd /home #进入/home目录把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录把/home目录下面的mydata...
    99+
    2023-06-05
  • Linux分卷压缩与解压缩的方法
    这篇文章主要讲解了“Linux分卷压缩与解压缩的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux分卷压缩与解压缩的方法”吧!举例说明:要将目录logs打包压缩并分割成多个1M的文...
    99+
    2023-06-05
  • Python实现图片压缩的案例详解
    目录1、引言2、PIL模块2.1 quality 方式2.2 thumbnail方式3、OpenCV模块3.1 安装3.2 执行代码4、总结1、引言 小屌丝:鱼哥,求助,求助 小鱼:...
    99+
    2022-11-12
  • python3压缩和解压文件案例总结
    目录python3压缩和解压文件扩展:Python3用代码实现压缩与解压一、说明二、zip文件压缩和解压缩实现三、tar文件的压缩与解压缩实现python3压缩和解压文件 1、tar...
    99+
    2023-02-15
    python压缩和解压文件 python3压缩和解压
  • Linux中有哪些压缩格式的压缩与解压方法
    Linux中有哪些压缩格式的压缩与解压方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于P...
    99+
    2023-06-09
  • Python文件的压缩与解压
    目录前言:1、压缩整个文件夹2、压缩指定扩展名文件3、获取指定类型的待压缩文件列表4、解压文件前言: Python在人工智能,后台服务等领域中得到了广泛应用。由于python有着大量...
    99+
    2022-11-10
  • Linux下的tar压缩解压缩命令详解(小结)
    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面...
    99+
    2022-06-04
    解压缩 小结 详解
  • Node.js中zip压缩和zip解压缩实例用法
    本篇内容主要讲解“Node.js中zip压缩和zip解压缩实例用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中zip压缩和zip解压缩实例用法...
    99+
    2022-10-19
  • Android中文件的压缩和解压缩实例代码
    使用场景 当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载...
    99+
    2022-06-06
    压缩 解压 Android
  • 怎么在java中利用压缩流实现压缩与解压
    本篇文章给大家分享的是有关怎么在java中利用压缩流实现压缩与解压,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程...
    99+
    2023-06-14
  • 详解Linux中zip压缩和unzip解压缩命令及使用详解
    下面给大家介绍下linux中zip压缩和unzip解压缩命令详解 1、把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2、把/h...
    99+
    2022-06-04
    linux解压缩命令 linux 解压缩 unzip linux 压缩 zip
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作