欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Hadoop】5.4 Hadoop压缩

程序员文章站 2022-07-15 22:05:40
...

5.4.1 概述

  1. 压缩的好处和坏处

    1. 压缩的优点:

      以减少磁盘 IO、减少磁盘存储空间

    2. 压缩的

      缺点 :增加 CPU开销

  2. 压缩原则

    1. 运算密集型的 Job,少用压缩
    2. IO密集型的 Job,多用压缩
  3. MapReduce支持的压缩编码

    1. 压缩算法对比介绍

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

      【Hadoop】5.4 Hadoop压缩

5.4.2 压缩方式的选择

压缩方式选择时重点考虑:压缩 /解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片

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

5.4.3 压缩位置的选择

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

【Hadoop】5.4 Hadoop压缩

  1. 输入端采用压缩

    1. 无须显示指定使用的编解码方式。Hadoop自动检查文件扩
      展名,如果扩展名能够匹配,就会用恰当的编解码方式对文
      件进行压缩和解压
    2. 企业开发:考虑因素
      1. 数据量小于块大小,重点考虑压缩和解压缩速度比较快
        的LZO/Snappy
      2. 数据量非常大,重点考虑支持切片的Bzip2和LZO
  2. Mapper输出采用压缩

    企业开发中如何选择:为了减少MapTask和ReduceTask之间的网络IO。重点考虑压缩和解压缩快的LZO、Snappy

  3. Reducer输出采用压缩

    1. 如果数据永久保存,考虑压缩率比较高的Bzip2和Gzip
    2. 如果作为下一个MapReduce输入,需要考虑数据量和是否支持切

5.4.4 压缩参数配置

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

    【Hadoop】5.4 Hadoop压缩

  2. 要在Hadoop 中启用压缩,可以配置如下参数

    参数 默认值 阶段 建议
    io.compression.codecs(在core-site.xml 中配置) 无,这个需要在命令行输入hadoop checknative 查看 输入压缩 Hadoop 使用文件扩展名判断是否支持某种编解码器
    mapreduce.map.output.compress (在 mapred site.xml 中配置) false mapper 这个参数设为true 启用压缩
    mapreduce.map.output.compress.codec (在 mapredsite.xml 中配置) org.apache.hadoop.io.compress.DefaultCodec mapper输出 企业多 使用 LZO 或S nappy 编解码器在此阶段压缩数据
    mapreduce.output.fileoutputformat.compress (在mapred site.xml 中配置) false reducer输出 这个参数设为true 启用压缩
    mapreduce.output.fileoutputformat.compress.codec (在mapred site.xml 中配置) org.apache.hadoop.io.compress.DefaultCodec reducer输出 使用标准工具或者编解码器,如 gzip 和bzip2

5.4.5 压缩实操案例

  1. Map输出 端采用压缩:

    在Driver类中添加:

    // 开启 map 端输出压缩
    config.setBoolean("mapreduce.map.output.compress", true);
    
    // 设置 map 端输出压缩方式
    config.setClass("mapreduce.map.output.compress.codec",BZip2Codec.class , CompressionCodec.class);
    
  2. Reduce输出 端采用压缩:

    在Driver类中添加:

    // 设置 reduce 端输出压缩开启
    FileOutputFormat.setCompressOutput(job, true);
    // 设置压缩的方式
    //FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
    FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
    //FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class);
    
相关标签: Hadoop Hadoop压缩