什么时候该用,什么时候不该用
FileOutputFormat.setCompressOutput(conf, true);
?
我听说它压缩了映射器输出。有没有可能压缩减速机侧输出?
(如果我的假设是错误的,请清除我,如何压缩mapper输出和reducer输出!)
您可以使用 控制减速器输出的mapred.output.compress
压缩,使用 控制映射器输出的压缩mapred.compress.map.output
。这些配置键可以在站点范围的配置文件、作业设置中设置(为true
或),或者作为运行作业时传递给 Hadoop 的选项。false
-D
压缩地图输出通常是个好主意。当输出不是最终结果时,我也会压缩减少输出,例如,当我在前一个作业的输出上运行另一个作业时。
压缩通常有助于更快地完成作业(即使它需要额外的压缩/解压缩处理),因为它可以大大减少 I/O 的数量。
您也可以选择压缩编解码器。我们使用 LZO,它不随 Hadoop 一起提供,但可以在这里找到:
https://github.com/kevinweil/hadoop-lzo
LZO 以最小的 CPU 开销压缩得很好。Bzip2 压缩得很好,但开销更大。Gzip 压缩得不太好,开销适中。(这些是概括。)我认为 LZO 具有最佳的特性平衡。