压缩与输入分割,Hadoop
压缩与输入分割•前提:在考虑如何压缩那些将由MapReduce处理的数据时,考虑压缩格式是否支持分割是很重要的。•案例•假设,一个文件时一个gzip格式的压缩文件,压缩后的大小为1GB。HDFS将其分为16块。然而针对每一块在进行分块是不可以的,因为gzip合适的文件不支持分割(分块)机制,所以读取他的MapReduce不分割文件,造成了只有Map读取16块文件的情况。导致运行时间变长。•应该选择哪种压缩形式•总体原则,还要经过测试,才可以决定。•经验:大文件选择支持分割的压缩形式在MR中使用压缩•前提:如果文件是压缩过的,那么在被MapReduce读取时,它们会被解压,根据文件的扩展名来选择应该使用拿一种压缩解码器。•使用:•压缩MapReduce的作业输出,在作业配置中将mapred.output.compress属性设置为true,将mapred.output.compression.codec属性设置为自己需要使用的压缩解码/编码器的类名。•通过gunzip–cfile来查看结果。Ø代码示例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)