我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hadoop中的压缩与解压缩方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hadoop中的压缩与解压缩方法是什么

这篇文章主要介绍“Hadoop中的压缩与解压缩方法是什么”,在日常操作中,相信很多人在Hadoop中的压缩与解压缩方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hadoop中的压缩与解压缩方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一:压缩的作用

压缩技术能够减少底层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:压缩性能的比较

Hadoop中的压缩与解压缩方法是什么

1.4:压缩方式的选择

1Gzip压缩

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

缺点:不支持split

应用场景:

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

Bzip2压缩

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

缺点:压缩/解压速度慢

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

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

3LZO压缩

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

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

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

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中的压缩与解压缩方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hadoop中的压缩与解压缩方法是什么

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

下载Word文档

猜你喜欢

Hadoop中的压缩与解压缩方法是什么

这篇文章主要介绍“Hadoop中的压缩与解压缩方法是什么”,在日常操作中,相信很多人在Hadoop中的压缩与解压缩方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hadoop中的压缩与解压缩方法是什么
2023-06-21

Python文件的压缩与解压方法是什么

本篇内容介绍了“Python文件的压缩与解压方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:Python在人工智能,后台服务等
2023-06-30

Linux分卷压缩与解压缩的方法

这篇文章主要讲解了“Linux分卷压缩与解压缩的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux分卷压缩与解压缩的方法”吧!1.举例说明:要将目录logs打包压缩并分割成多个1M
2023-06-05

Linux中有哪些压缩格式的压缩与解压方法

Linux中有哪些压缩格式的压缩与解压方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于P
2023-06-09

Linux下常用压缩格式的压缩与解压方法详解

.tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) -----------------------------------------
2022-06-03

Python3压缩和解压缩的实现方法

这篇文章主要为大家展示了Python3压缩和解压缩的实现方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Python3压缩和解压缩的实现方法”这篇文章吧。python可以做什么Python是一种
2023-06-06

Ubuntu压缩和解压缩RAR文件的方法

本篇内容主要讲解“Ubuntu压缩和解压缩RAR文件的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu压缩和解压缩RAR文件的方法”吧!方法很简单,一条命令就搞定了:sudo ap
2023-06-13

DB2在Linux中的备份压缩与解压缩

DB2是IBM公司开发的一款关系数据库管理系统,它可以在多种操作系统上运行,包括Linux。在Linux中,DB2的备份和恢复通常使用db2backup和db2restore工具来完成。这些工具支持备份文件的压缩和解压缩,以节省存储空间并提
DB2在Linux中的备份压缩与解压缩
2024-09-22

怎么在java中利用压缩流实现压缩与解压

本篇文章给大家分享的是有关怎么在java中利用压缩流实现压缩与解压,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程
2023-06-14

Linux通过命令压缩与解压缩的方法| tar, tar.gz, tar.bz2

我最开始用 Linux 的时候,不是在 cd、mkdir 之类的这些命令受到了阻碍,因为这类命令在 windows 的 DOS 下也经常性使用,所以很容易上手。但是,碰到了压缩文件的时候,我就一脸懵逼,因为在 windows 下,“压缩与解
2022-06-04

Linux下有哪些压缩与解压方法

本篇内容介绍了“Linux下有哪些压缩与解压方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!.tar 解包: tar xvf FileNa
2023-06-10

Android实现zip文件压缩及解压缩的方法

本文实例讲述了Android实现zip文件压缩及解压缩的方法。分享给大家供大家参考。具体如下: DirTraversal.java如下:package com.once; import java.io.File; import java.u
2022-06-06

Pythonshutil模块实现文件的裁剪、压缩与解压缩的方法

这篇文章主要介绍了Pythonshutil模块实现文件的裁剪、压缩与解压缩的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-29

在线sql压缩的方法是什么

在线SQL压缩的方法通常包括以下几种:使用数据库管理工具:一些数据库管理工具如Navicat等提供了在线SQL压缩的功能,用户可以直接在工具中进行操作。使用数据库压缩工具:有些数据库压缩工具如SQL Data Compress等可以帮助用户
在线sql压缩的方法是什么
2024-03-06

Android数据压缩的方法是什么

本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言在开发中我们难免
2023-07-05

Linux中有哪些文件的压缩与解压缩命令

本篇文章为大家展示了Linux中有哪些文件的压缩与解压缩命令,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、zip压缩与解压缩 zip是最为广泛使用的压缩程序,经它压缩的文件会产生扩展
2023-06-12

变量在Oracle数据压缩与解压缩中的作用

在Oracle数据库中,数据压缩和解压缩是一种节省存储空间的技术行压缩(Row Compression):行压缩是Oracle 10g引入的一种针对表数据的压缩技术。通过使用行压缩,可以有效地减少存储空间的需求,提高查询性能。在行压缩中,变
变量在Oracle数据压缩与解压缩中的作用
2024-08-27

linux xz压缩解压的方法小结

先给大家介绍下linux xz压缩解压的方法小结 1. 解压 xz 格式文件 方法一: 需要用到两步命令,首先利用 xz-utils 的 xz 命令将 linux-3.12.tar.xz 解压为 linux-3.12.tar,其次用 ta
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录