Hadoop,如何压缩映射器输出但不压缩reducer输出

时间:2011-04-06 18:22:41

标签: compression hadoop hdfs

我有一个map-reduce java程序,我尝试只压缩映射器输出但不压缩reducer输出。我认为这可以通过在Configuration实例中设置以下属性来实现,如下所示。但是,当我运行我的作业时,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);

5 个答案:

答案 0 :(得分:54)

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

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

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

mapred.output.compression.type :我使用了阻止。即使对于所有压缩格式(gzip,snappy和bzip2),这也会使压缩可分割,只需确保使用可拆分文件格式,如sequence,RCFile或Avro。

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

还要记住压缩映射输出时,因为拆分压缩会因排序顺序而异。像数据一样接近,压缩效果越好。

答案 1 :(得分: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

答案 2 :(得分: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"); 

答案 3 :(得分: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调用的本机编解码器,并为您提供更好的性能。

答案 4 :(得分:1)

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

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

相关问题