//压缩mapper输出
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);
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);
mapred.compress.map.output: 是指在Mapper和Reducer之间对数据进行压缩。如果使用Snappy编解码器,这很可能会增加读写速度并减少网络开销。不要在这里分心。这些文件不会存储在HDFS中。它们是仅存在于MapReduce作业期间的临时文件。
mapred.map.output.compression.codec: 我建议使用Snappy。
mapred.output.compress: 这个布尔标志将定义整个MapReduce作业是否输出压缩数据。我总是将其设置为true。更快的读写速度和减少磁盘空间的使用。
mapred.output.compression.type: 我使用块压缩格式。这将使所有压缩格式(gzip、snappy和bzip2)都可以进行分割,只需确保使用可分割的文件格式,如Sequence、RCFile或Avro。
mapred.output.compression.codec: 这是MapReduce作业的压缩编解码器。我主要使用以下三种:Snappy(最快的读写速度,2x-3x的压缩比),gzip(正常的读取速度,较快的写入速度,5x-8x的压缩比),bzip2(较慢的读写速度,8x-12x的压缩比)。
还要记住,当压缩MapReduce输出时,由于分割的原因,压缩将根据您的排序顺序而不同。相似的数据越靠在一起,压缩效果越好。
使用MR2,我们现在应该进行设置。
conf.set("mapreduce.map.output.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress", false)
"输出压缩"将压缩您的最终输出。如果要仅压缩地图输出,请使用类似以下内容的代码:
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");
mapreduce.map.output.compress
、mapreduce.output.fileoutputformat.compress.type
和 mapreduce.map.output.compress.codec
。 - rsedlr