|
压缩与输入分割 ·前提: 在考虑如何压缩那些将由MapReduce处理的数据时,考虑压缩格式是否支持分割是很重要的。 · 案例 ·假设,一个文件时一个gzip格式的压缩文件,压缩后的大小为1GB。HDFS将其分为16块。然而针对每一块在进行分块是不可以的,因为gzip合适的文件不支持分割(分块)机制,所以读取他的MapReduce不分割文件,造成了只有Map读取16块文件的情况。导致运行时间变长。 ·应该选择哪种压缩形式 ·总体原则,还要经过测试,才可以决定。 ·经验:大文件选择支持分割的压缩形式 在 MR 中使用压缩 ·前提: 如果文件是压缩过的,那么在被MapReduce读取时,它们会被解压,根据文件的扩展名来选择应该使用拿一种压缩解码器。 ·使用: ·压缩MapReduce的作业输出,在作业配置中将 mapred.output.compress属性设置为true,将mapred.output.compression.codec属性设置为自己需要使用的压缩解码/编码器的类名。 ·通过gunzip –c file来查看结果。 Ø代码示例 conf.setBoolean(“mapred.output.compress’,true) Conf.setClass(“mapred.output.compression.codec”,GizpCodec.class, CompressionCodec.class); ·Map作业输出结果的压缩 ·使用原因 因为Map作业的中间结果会输出到本地,并在网络上传递。所以压缩能获得更好性能,因为传播的数据减少了。 ·Map输出压缩属性 ·mapred.compress.map.output ·mapred.map.output ·compression.codec ·代码示例 ·conf.setCompressMapOutput ·conf.setMapOutputCompressorClass(GzipCodec.classs) |
|
|