压缩与输入分割,Hadoop

压缩与输入分割 •前提:           在考虑如何压缩那些将由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)

猜你喜欢

转载自wangqiaowqo.iteye.com/blog/1705751