4.7.2 压缩文件
在分布式系统中,不同节点的数据交换是影响整体性能的一个重要因素。另外在Hadoop的Map阶段所处理的输出大小也会影响整个MapReduce程序的执行时间。这是因为Map阶段的输出首先存储在一定大小的内存缓冲区中,如果Map输出的大小超出一定限度,Map task就会将结果写入磁盘,等Map任务结束后再将它们复制到Reduce任务的节点上。如果数据量大,中间的数据交换会占用很多的时间。
一个提高性能的方法是对Map的输出进行压缩。这样会带来以下几个方面的好处:减少存储文件的空间;加快数据在网络上(不同节点间)的传输速度,以及减少数据在内存和磁盘间交换的时间。可以通过将mapred.compress.map.output属性设置为true来对Map的输出数据进行压缩,同时还可以设置Map输出数据的压缩格式,通过设置mapred.map.output.compression.codec属性即可进行压缩格式的设置。