如何在Hadoop MapReduce中压缩Map阶段输出
时间:2020-01-09 10:34:33 来源:igfitidea点击:
在Hadoop MapReduce作业中,我们可以选择压缩Map阶段的输出。由于Map任务的输出存储在本地磁盘上,并且数据也通过网络传输到reducer节点,因此压缩map阶段的输出应有助于MapReduce作业更快地运行。
我们可以使用snappy或者LZ4之类的快速压缩器来压缩地图输出,因为压缩器是可拆分的,对于中间的地图输出来说无关紧要。
在本教程中,使用Snappy编解码器给出了压缩Map输出的配置步骤。
如果我们没有本机快照程序库,则可以在Ubuntu中使用以下命令进行安装。使用本机库进行压缩可以使其更快,并有助于提高MapReduce作业的性能。
$ sudo apt-get install libsnappy-dev
所需的配置更改
如果要在整个集群级别使用Snappy压缩来压缩地图阶段的输出,请在mapred-site.xml中设置以下属性:
<property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>
这些属性的描述如下-
- mapreduce.map.output.compress –地图的输出在通过网络发送之前是否应该被压缩。默认为false。
- mapreduce.map.output.compress.codec –如果将地图输出压缩,则应使用哪种编解码器。默认值为org.apache.hadoop.io.compress.DefaultCodec
如果要将属性设置为基于作业的基础来压缩地图输出,则需要在作业中添加以下行。
Configuration conf = new Configuration(); conf.setBoolean("mapreduce.map.output.compress", true); conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");