25

我有一个 map-reduce java 程序,在该程序中我尝试只压缩映射器输出而不压缩减速器输出。我认为这可以通过在配置实例中设置以下属性来实现,如下所示。但是,当我运行我的工作时,reducer 生成的输出仍然被压缩,因为生成的文件是:part-r-00000.gz。有没有人成功地压缩了映射器数据而不是减速器?这甚至可能吗?

//压缩映射器输出

conf.setBoolean("mapred.output.compress", true);
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);
4

5 回答 5

55

mapred.compress.map.output:是mapper和reducer之间的数据压缩。如果您使用 snappy 编解码器,这很可能会提高读写速度并减少网络开销。不用担心在这里吐痰。这些文件不存储在 hdfs 中。它们是仅为 map reduce 作业而存在的临时文件。

mapred.map.output.compression.codec:我会使用snappy

mapred.output.compress:这个布尔标志将定义整个 map/reduce 作业将输出压缩数据。我也总是将其设置为 true。更快的读/写速度和更少的磁盘空间使用。

mapred.output.compression.type:我使用块。这将使压缩即使对于所有压缩格式(gzip、snappy 和 bzip2)也是可拆分的,只需确保您使用的是可拆分的文件格式,如序列、RCFile 或 Avro。

mapred.output.compression.codec:这是 map/reduce 作业的压缩编解码器。我主要使用以下三种中的一种:Snappy(最快 r/w 2x-3x 压缩)、gzip(普通 r 快速 w 5x-8x 压缩)、bzip2(慢速 r/w 8x-12x 压缩)

还请记住,当压缩映射输出时,由于拆分压缩会根据您的排序顺序而有所不同。数据越接近,压缩效果就越好。

于 2012-07-05T01:11:35.200 回答
21

使用 MR2,现在我们应该设置

conf.set("mapreduce.map.output.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress", false)

有关详细信息,请参阅:http ://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

于 2014-03-14T03:03:49.683 回答
12

“输出压缩”将压缩您的最终输出。要仅压缩地图输出,请使用以下内容:

  conf.set("mapred.compress.map.output", "true")
  conf.set("mapred.output.compression.type", "BLOCK"); 
  conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec"); 
于 2011-04-07T10:55:26.397 回答
2
  1. 您需要将“mapred.compress.map.output”设置为 true。
  2. 或者,您可以通过设置“mapred.map.output.compression.codec”来选择您的压缩编解码器。注意 1:mapred 输出压缩不应该是 BLOCK。有关详细信息,请参阅以下 JIRA: https ://issues.apache.org/jira/browse/HADOOP-1194 注 2:GZIP 和 BZ2 是 CPU 密集型的。如果您的网络速度较慢,并且 GZIP 或 BZ2 提供更好的压缩比,则可能证明 CPU 周期的花费是合理的。否则,请考虑 LZO 或 Snappy 编解码器。
    注意 3:如果您想使用地图输出压缩,请考虑安装通过 JNI 调用的本机编解码器,并为您提供更好的性能。
于 2012-04-05T14:34:24.160 回答
1

如果您使用 MapR 的 Hadoop 发行版,则无需使用编解码器的所有文件夹即可获得压缩的好处。

MapR 在文件系统级别本地压缩,因此应用程序不需要知道或关心。压缩可以在目录级别打开或关闭,因此您可以压缩输入,但不能压缩输出或任何您喜欢的。通常,压缩非常快(默认情况下它使用类似于 snappy 的算法),大多数应用程序在使用本机压缩时会看到性能提升。如果您的文件已经被压缩,那么很快就会被检测到并且压缩会自动关闭,因此您也不会在那里看到任何惩罚。

于 2013-03-28T07:50:34.907 回答