【Hadoop】5.4 Hadoop压缩
程序员文章站
2022-07-15 22:05:40
...
5.4 Hadoop压缩
5.4.1 概述
-
压缩的好处和坏处
-
压缩的优点:
以减少磁盘 IO、减少磁盘存储空间
-
压缩的
缺点 :增加 CPU开销
-
-
压缩原则
- 运算密集型的 Job,少用压缩
- IO密集型的 Job,多用压缩
-
MapReduce支持的压缩编码
-
压缩算法对比介绍
压缩格式 Hadoop 是否自带 算法 文件扩展名 是否可切片 换成压缩格式后,原来的程序是否需要修改 DEFLATE 是,直接使用 DEFLATE .deflate 否 和文本处理一样,不需要修改 Gzip 是,直接使用 DEFLATE .gz 否 和文本处理一样,不需要修改 bzip2 是,直接使用 bzip2 .bz2 是 和文本处理一样,不需要修改 LZO 否,需安装 LZO .lzo 是 需要建索引,还需指定输入格式 Snappy 是,直接使用 Snappy .Snappy 否 和文本处理一样,不需要修改 -
压缩性能的比较
-
5.4.2 压缩方式的选择
压缩方式选择时重点考虑:压缩 /解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片
- Gzip压缩
- 优点:压缩率比较高
- 缺点:不支持Split 压缩 /解压速度 一般
- Bzip2压缩
- 优点:压缩率高 支持 Split
- 缺点:压缩/解压速度慢
- Lzo压缩
- 优点:压缩/解压速度比较快;支持 Split
- 缺点:压缩率 一般 想支持切片需要额外创建索引
- Snappy 压缩
- 优点:压缩和解压缩速度快
- 缺点:不支持Split;压缩率一般
5.4.3 压缩位置的选择
压缩可以在MapReduce 作用的任意阶段启用
-
输入端采用压缩
- 无须显示指定使用的编解码方式。Hadoop自动检查文件扩
展名,如果扩展名能够匹配,就会用恰当的编解码方式对文
件进行压缩和解压 - 企业开发:考虑因素
- 数据量小于块大小,重点考虑压缩和解压缩速度比较快
的LZO/Snappy - 数据量非常大,重点考虑支持切片的Bzip2和LZO
- 数据量小于块大小,重点考虑压缩和解压缩速度比较快
- 无须显示指定使用的编解码方式。Hadoop自动检查文件扩
-
Mapper输出采用压缩
企业开发中如何选择:为了减少MapTask和ReduceTask之间的网络IO。重点考虑压缩和解压缩快的LZO、Snappy
-
Reducer输出采用压缩
- 如果数据永久保存,考虑压缩率比较高的Bzip2和Gzip
- 如果作为下一个MapReduce输入,需要考虑数据量和是否支持切
5.4.4 压缩参数配置
-
为了支持多种压缩/解压缩算法,Hadoop 引入了编码/解码器
-
要在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 压缩实操案例
-
Map输出 端采用压缩:
在Driver类中添加:
// 开启 map 端输出压缩 config.setBoolean("mapreduce.map.output.compress", true); // 设置 map 端输出压缩方式 config.setClass("mapreduce.map.output.compress.codec",BZip2Codec.class , CompressionCodec.class);
-
Reduce输出 端采用压缩:
在Driver类中添加:
// 设置 reduce 端输出压缩开启 FileOutputFormat.setCompressOutput(job, true); // 设置压缩的方式 //FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class); FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class); //FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class);
上一篇: python类属性访问魔法方法
下一篇: elf格式二进制文件