Hadoop 为什么纱线中的压缩会使工作速度慢几倍?

Hadoop 为什么纱线中的压缩会使工作速度慢几倍?,hadoop,mapreduce,yarn,hadoop2,Hadoop,Mapreduce,Yarn,Hadoop2,当我使用压缩(snappy)在纱线(2.4.0)中运行作业时,对作业完成时间有很大影响。例如,我进行了以下实验。 工作:Invertdindex 集群:10个从属虚拟机(4个CPU 8GB RAM) 5GB反相器索引无压缩作业完成时间(snappy):226s,有压缩作业完成时间:1600s 50GB反相器索引的作业完成时间(无压缩)(snappy):2000s,有压缩:14000s 我在mapred-site.xml中的配置如下: <name>mapreduce.map.outpu

当我使用压缩(snappy)在纱线(2.4.0)中运行作业时,对作业完成时间有很大影响。例如,我进行了以下实验。 工作:Invertdindex 集群:10个从属虚拟机(4个CPU 8GB RAM)

5GB反相器索引无压缩作业完成时间(snappy):226s,有压缩作业完成时间:1600s

50GB反相器索引的作业完成时间(无压缩)(snappy):2000s,有压缩:14000s

我在mapred-site.xml中的配置如下:

<name>mapreduce.map.output.compress</name>  
  <value>true</value>
</property>
<property>
  <name>mapred.map.output.compress.codec</name>  
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
mapreduce.map.output.compress
真的
mapred.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec

我读过很多资料,说压缩应该会提高性能,但在这里,它已经将工作速度降低了近7倍。我做错了什么?

这可能是
mapreduce.output.fileoutputformat.compress.type的默认设置,设置为
RECORD

基本上,它会尝试压缩每条记录,如果记录是小的文本片段(例如,反向索引中的一个标记),它可能会比以前更大


您可以尝试将此属性设置为
BLOCK
,该属性应在块级别进行压缩,从而比冗余文本数据提供更好的压缩效果。

我通过以下步骤修复了此压缩问题:

1,修复“无法加载本机hadoop库”的问题

2、安装snappy

3,将/usr/local/lib/libsnappy*复制到$HADOOP_HOME/lib/native/

4、在hadoop-env.sh和mapred-site.xml中配置LD_库_路径

<property>  
    <name>mapred.child.env</name>  
    <value>LD_LIBRARY_PATH=$HADOOP_HOME/lib/native</value>  
</property

mapred.child.env
LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

谢谢你,托马斯。但是我没有压缩最终的输出,我只是压缩了中间的数据。您的意思是即使我不压缩最终输出,也要将此属性设置为BLOCK吗?顺便问一下,我需要自己安装snappy吗?可能是hadoop本机库出了问题吗?我尝试了块配置,但没有帮助。嗨,Thomas,这个问题是本机库造成的,谢谢。@Zeroun这取决于您使用的Snappy实现,有些库不需要本机库,而且速度仍然相当。