Hadoop学习---8、Hadoop数据压缩

1、Hadoop数据压缩

1.1 概述

1、压缩的好处和坏处
(1)优点:减少磁盘IO、减少磁盘储存空间
(2)缺点:增加CPU开销
2、压缩原则
(1)运算密集型的Job,少用压缩
(2)IO密集型的Job,多用压缩

1.2 MR支持的压缩编码

1、压缩算法对比介绍

压缩格式Hadoop自带?算法文件扩展名是否可切片换成压缩格式后,原来的程序是否需要修改
DEFLATE是,直接使用DEFLATE.deflate和文本处理一样,不需要修改
Gzip是,直接使用DEFLATE.gz和文本处理一样,不需要修改
bzip2是,直接使用bzip2.bz2和文本处理一样,不需要修改
LZO否,需要按安装LZO.lzo需要建索引,还需要指定输入格式
Snappy是,直接使用Snappy.snappy和文本处理一样,不需要修改

2、压缩性能的比较

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

1.3、压缩方式选择

重点考虑:压缩?解压缩速度、压缩率(压缩后储存大小)、压缩后是否可以支持切片

(1)Gzip压缩
优点:压缩率比较高
缺点:不支持Spilt;压缩/解压速度一般
(2)Bzip压缩
优点:压缩率高,支持Spilt
缺点:压缩/解压速度慢
(3)LZO压缩
优点:压缩/解压速度比较快;支持Spilt
缺点:压缩率一般;想支持切片需要额外创建索引
(4)Snappy压缩
优点:压缩和解压速度快
缺点:不支持Spilt;压缩率一般

(5)压缩位置选择
压缩可以在MapReduce作用的任意阶段启用。
在这里插入图片描述

1.4、压缩参数配置

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

压缩格式对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
bziporg.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

(2)要在Hadoop中启用压缩,可以配置如下参数
在这里插入图片描述
在这里插入图片描述

1.5 压缩案例实操

1.5.1 Map输出端采用压缩

即使你的MapReduce的输入和输出文件都是未压缩文件,你任然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只有设置两个属性即可,我们来看下代码怎么设置。

用wordcount举例子
1、给大家提供的 Hadoop 源码支持的压缩格式有:BZip2Codec、DefaultCodec
(1)Driver类

package org.example._12yasuo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.BZip2Codec;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @ClassName WordCountDriver
 * @Description TODO
 * @Author Zouhuiming
 * @Date 2023/5/19 11:29
 * @Version 1.0
 */
public class WordCountDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

        //1、获取job
        Configuration configuration=new Configuration();

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

        Job job=Job.getInstance(configuration);



        //2、设置jar包路径
        job.setJarByClass(WordCountDriver.class);

        //3、关联mapper和reducer
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReduce.class);

        //4、设置map输出的kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //5、设置最终输出的kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //6、设置输入路径和输出路径
        FileInputFormat.addInputPath(job,new Path("E:\\testCSDN\\input"));
        FileOutputFormat.setOutputPath(job,new Path("E:\\testCSDN\\output1"));
        //7、提交job

        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}


(2)Mapper和Reducer保持不变

1.5.2 Reduce输出端采用压缩

1、Driver

package org.example._13yasuo1;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.BZip2Codec;
import org.apache.hadoop.io.compress.bzip2.Bzip2Compressor;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @ClassName WordCountDriver
 * @Description TODO
 * @Author Zouhuiming
 * @Date 2023/5/19 11:29
 * @Version 1.0
 */
public class WordCountDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

        //1、获取job
        Configuration configuration=new Configuration();
        Job job=Job.getInstance(configuration);

        //2、设置jar包路径
        job.setJarByClass(WordCountDriver.class);

        //3、关联mapper和reducer
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReduce.class);

        //4、设置map输出的kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //5、设置最终输出的kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //6、设置输入路径和输出路径
        FileInputFormat.addInputPath(job,new Path("E:\\testCSDN\\input"));
        FileOutputFormat.setOutputPath(job,new Path("E:\\testCSDN\\output2"));


       //设置reduce端输出压缩开启
        FileOutputFormat.setCompressOutput(job,true);
        //设置压缩方式
        FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);



        //7、提交job
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}


(2)Mapper和Reducer类保持不变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23960.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2023 · CANN训练营第一季】应用开发(初级)第四章——模型推理

AscendCL运行资源管理 申请运行管理资源时,需按顺序依次申请: Device、Context、Stream,然后根据实际需求调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行,也支持在Device运行时,在编程时需要就需要根…

Shap-E:3D资产的生成式AI大模型

OpenAI 刚刚发布了 Shap-E,这是一种基于文本提示和图像创建 3D 资产的生成模型,能够生成带纹理的网格和神经辐射场 ,从而实现各种 3D 输出。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 在本教程中,我们将引导你在 Go…

嵌入式软件测试笔记2 |TEmb方法概述

2 |TEmb方法概述 1 TEmb简介2 TEmb工作原理3 系统特性4 TEmb通用元素4.1 生命周期4.2 技术4.3 基础设施4.3.1 测试环境4.3.2 工具和测试自动化4.3.3 办公环境 4.4 组织 5 组合专用测试方法的机制5.1 常用系统特性5.2 特定方法5.3 LITO矩阵 1 TEmb简介 TEmb是一种方法&#xff…

Rocksdb相关学习

1 Basic Operations 先介绍一些 RocksDB 的基本操作和基本架构。 1.1 LSM 与 WriteBatch 参考文档5提到RocksDB 是一个快速存储系统,它会充分挖掘 Flash or RAM 硬件的读写特性,支持单个 KV 的读写以及批量读写。RocksDB 自身采用的一些数据结构如 LSM/…

picoctf_2018_rop chain

小白垃圾笔记,不建议阅读。 这道题目其实我是瞎做的. 本地调试需要写一个文件名为flag.txt的文件。 先检查下保护:(我把文件名改成pwn了),32位仅仅开启了nx 然后放到32位ida里: main函数如下&#xff1a…

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python接口自动化测…

element-ui菜单el-menu的使用

效果演示 先给大家看一下效果吧 el-menu详解 Menu Attributes# 属性名说明类型可选值默认值mode菜单展示模式stringhorizontal / verticalverticalcollapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)boolean—falseellipsis是否省略多余的子项…

软件测试之自动化测试详解

文章目录 一.前言二.selenium介绍三.selenium的组成部分四.Selenium的环境搭建下载浏览器配置环境变量验证环境是否搭建成功 五.Selenium的API打开浏览器元素的定位操作测试对象等待操作信息获取鼠标操作键盘操作选项操作浏览器操作 六.需要用到的包 一.前言 自动化测试指软件…

SQL面试必备:100道高频考题解析

前言 在众多IT职场中,SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试,那么这份“SQL面试 100 问”绝对是你不能错过的宝藏! 这份清单涵盖了100道高频考题,从基础知识到复杂应用都有所涉及,帮助你全…

树莓派485转USB串口调试教程

步骤1:接线方式:485转USB 注意接线口是否对应:A1B1 步骤2:查看串口配置—映射关系是否正确 命令:ls -l /dev serial0即GPIO映射的串口,默认是ttyS0,即mini串口 serial1即板载蓝牙映射的串口&am…

关于原生feign发起请求时,参数注解的相关问题

先说结论: POST请求必须指定请求头,body参数用RequestBody或者Param(需要一个一个写)。 GET请求,传参只能用QueryMap,后边变量是Map形式,哪怕是一个参数也必须放到map里边。如果是路径变量&…

Java 集合中 ArrayList 的扩容机制原理(面试+读源码)

在 Java 中,ArrayList 内部是通过一个数组来存储元素的,是一个数组结构的存储容器。当向一个 ArrayList 中添加元素时,如果当前数组已经满了,就需要扩容。 集合的继承关系图 一、面试回答 ( ArrayList 的扩容机制原理 ) 面试…

Solidity基础六

生活本来就是平凡琐碎的,哪有那么多惊天动地的大事,快乐的秘诀就是不管对大事小事都要保持热情 目录 一、Solidity的特殊变量(全局) 二、Solidity的不可变量 immutable的赋值方式 三、Solidity的事件与日志 事件和日志加深理解 四、Solidity的异常…

ChatGPT1论文解读《Improving Language Understanding by Generative Pre-Training》

论文总结 以下是我阅读完整篇论文做的个人总结,基本包含了chatGPT1设计的完整框架思路,可以仅看【论文总结】章节。 在GPT1实现的核心架构中,包含两个阶段。 第一阶段 在第一阶段基于一个包含7000本书籍内容的海量未标注文本数据集进行无…

注解-反射-XML配置原理

java刚开始原本是直接在方法中创建对象执行程序等,部分代码重复率高,后来就发展成方法封装调用,再后来出现的像spring框架等,引入了XML配置,使得程序更加简洁,方便等,其中XML配置也是基于java反…

java+iClientOpenlayers实现污水排放扩散模拟(湖库污染排放扩散模拟)

软件实现效果 一、应用背景 湖库污染是一个日益严峻的环境问题。随着城市化和工业化的加速发展,越来越多的有害物质被排放入湖库中,导致湖库污染加剧并扩散到周围地区。本文将探讨湖库污染扩散的原因、影响和解决方法。 首先,湖库污染扩散的…

堆排序之——TopK问题

思维导图: 一,TopK算法的运用 TopK的算法在我们的日常生活中可谓是大有用处,比如你在点外卖时外卖榜单上的销量前几名的筛选,富豪排行榜的榜单人物的筛选,游戏排位……等等领域都会有TopK算法的涉及。TopK问题的用处可…

github创建仓库和拉取代码

目录 一、git创建仓库 第一步:首先登录github 第二步:进入建立的仓库(或者新建仓库) 第三步:创建成功 第四步:在本地新建一个文件夹,然后在文件夹下打开git bash 第五步:在git bash命令框执行git init…

专业解读财务共享实现财务数智化转型的有效路径

近年来,随着数字经济的飞速发展,各大企业全面开启数智化转型之路,作为企业数智化转型的重要内容,财务数智化转型始于财务共享服务。然而,财务共享建设并不是一蹴而就的,如何通过财务共享实现财务数智化转型…

什么是分布式软件系统

:什么是分布式软件系统?分布式软件系统是什么意思? 分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分…