如何在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");