目录

  • 一、压缩概述
  • 优缺点
  • 原则
  • 二、MR 支持的压缩编码
  • 三、压缩方式选择
  • Gzip压缩
  • Bzip2 压缩
  • Lzo压缩
  • Snappy压缩
  • 压缩位置选择
  • 四、压缩参数配置
  • 五、压缩案例
  • 六、数据清洗ETL


一、压缩概述

优缺点

优点:减少磁盘IO、减少磁盘存储空间;
缺点:增加CPU开销。

原则

  1. 运算密集型的job,少用压缩;
  2. IO密集型的job,多用压缩。

二、MR 支持的压缩编码

  1. 压缩算法对比
  2. 压缩性能比较

三、压缩方式选择

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

Gzip压缩

优点:压缩率比较高;
缺点:不支持 Split;压缩/解压速度一般;

Bzip2 压缩

优点:压缩率高;支持 Split;
缺点:压缩/解压速度慢。

Lzo压缩

优点:压缩/解压速度比较快;支持split;
缺点:压缩率一般;想支持切片需要额外创建索引。

Snappy压缩

优点:压缩和解压缩速度快;
缺点:不支持 Split;压缩率一般;

压缩位置选择

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

hadoop怎么进行数据清洗 hadoop做数据清洗_hadoop怎么进行数据清洗

四、压缩参数配置

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

hadoop怎么进行数据清洗 hadoop做数据清洗_etl_02

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

hadoop怎么进行数据清洗 hadoop做数据清洗_压缩率_03

五、压缩案例

对于WordCount案例,Mapper/ Reducer不变,只需修改Driver;

Mapper端压缩:

Configuration conf = new Configuration();
// 开启 map 端输出压缩 conf.setBoolean("mapreduce.map.output.compress", true);
// 设置 map 端输出压缩方式
        conf.setClass("mapreduce.map.output.compress.codec",
BZip2Codec.class,CompressionCodec.class);

Reduce 输出端采用压缩:

FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
// 设置 reduce 端输出压缩开启 FileOutputFormat.setCompressOutput(job, true);
// 设置压缩的方式
       FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
// FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
// FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class);

六、数据清洗ETL

“ETL” 是英文Extract- Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目前端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。

在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。