MR设置输出压缩算法Lzop,LzoCodec vs LzopCodec

hadoop MapReduce的输出压缩算法的设置(四种方法)

1、FileOutputFormat设置

    // 优化措施一:压缩MapReduce的输出结果-->使用Lzop压缩-->输出空间占比小
    FileOutputFormat.setCompressOutput(job, true);    //setOutputCompressorClass
    // 使用输出文件压缩,设置reduce输出的压缩算法:Lzop压缩
    FileOutputFormat.setOutputCompressorClass(job, LzopCodec.class);

2、Configuration对象设置

    // 获取job的实例
    Job job = Job.getInstance();
    // 1、配置文件获取
    Configuration conf = this.getConf();
    // 优化手段::压缩输出文件
    conf.set(FileOutputFormat.COMPRESS, "true");
    conf.set("mapreduce.output.fileoutputformat.compress.codec", LzopCodec.class.getName());

3、mapred-site.xml文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
#中间阶段的压缩
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
<description>Map是否开启输出压缩</description>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
<description>Map输出压缩算法:lzo</description>
</property>
#最终阶段的压缩
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
<description>Reduce是否启用输出压缩</description>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>com.hadoop.compression.lzo.LzopCodec</value>
<description>Reduce输出压缩算法:lzop</description>
</property>
</configuration>

4、通过配置参数进行传值

1
2
-Dmapreduce.output.fileoutputformat.compress=true 
-Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec

LzoCodec 与 LzopCodec 的区别

  1. LzoCodec比LzopCodec更快, LzopCodec为了兼容LZOP程序添加了如 bytes signature, header等信息
  2. 如果使用 LzoCodec作为Reduce输出,则输出文件扩展名为”.lzo_deflate”,它无法被lzop读取;如果使用LzopCodec作为Reduce输出,则扩展名为”.lzo”,它可以被lzop读取
  3. 生成lzo index job的”DistributedLzoIndexer“无法为 LzoCodec,即 “.lzo_deflate”扩展名的文件创建index
  4. ”.lzo_deflate“文件无法作为MapReduce输入,”.LZO”文件则可以。
  5. 综上所述得出最佳实践:map输出的中间数据使用 LzoCodec,reduce输出使用 LzopCodec

参考链接:

https://blog.csdn.net/zhu_xun/article/details/21874293

https://blog.csdn.net/leys123/article/details/51982592/