Mapreduce作业gzip压缩失败

时间:2015-05-20 11:17:43

标签: hadoop zlib

我已经设置了一个新的群集(在Windows上使用HDP),我遇到了一个我以前见过的新问题。

当我从hadoop-examples jar运行一个简单的字数统计问题时,MapreduceV2作业失败并出现以下错误

5/05/16 18:58:29 INFO mapreduce.Job: Task Id : attempt_1431802381254_0001_r_000000_0, Status : FAILED
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#15 

现在,当我转到Application Master跟踪器并深入研究日志时,我发现reducer正在期待一个gzip文件,但映射器输出不是

2015-05-16 18:45:20,864 WARN [fetcher#1] org.apache.hadoop.mapreduce.task.reduce.Fetcher: Failed to shuffle output of attempt_1431791182314_0011_m_000000_0 from <url>:13562
java.io.IOException: not a gzip file 

当我专门钻进Map阶段日志时,我看到了这个

2015-05-16 18:45:09,532 WARN [main] org.apache.hadoop.io.compress.zlib.ZlibFactory: Failed to load/initialize native-zlib library
2015-05-16 18:45:09,532 INFO [main] org.apache.hadoop.io.compress.CodecPool: Got brand-new compressor [.gz]
2015-05-16 18:45:09,532 WARN [main] org.apache.hadoop.mapred.IFile: Could not obtain compressor from CodecPool

我的core-site.xml

中有以下配置
<property>     
  <name>io.compression.codecs</name>
   <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
   <description>A list of the compression codec classes that can be used for compression/decompression.</description>   
</property> 

和mapred-site.xml

<property>
  <name>mapred.compress.map.output</name>
  <value>true</value>
</property>  

<property>     
   <name>mapred.map.output.compression.codec</name>
   <value>org.apache.hadoop.io.compress.GzipCodec</value>   
</property> 

<property>     
   <name>mapred.output.compression.type</name>        
   <value>BLOCK</value>
</property> 

<property>     
  <name>mapred.output.compress</name>
  <value>true</value>   
</property>   

<property>     
   <name>mapred.output.compression.codec</name>
   <value>org.apache.hadoop.io.compress.GzipCodec</value>   
</property> 
  

现在我意识到这指向本机zlib dll加载中的错误,因此我运行了作业覆盖选项以在不进行压缩的情况下运行,并且 工作。

我从zlib site下载了zlib.dll并将其放在Hadoop / bin,C:\ system32和C:\ SystemWOW64文件夹中并重新启动了群集服务,但我仍然遇到同样的错误。不知道为什么。我会很感激任何想法进一步调试并解决它

1 个答案:

答案 0 :(得分:0)

Hadoop 2.7.2

当我在Windows 7上构建并运行hadoop 2.7.2时遇到了同样的问题。要解决此问题,您需要执行以下操作:

1)在Build Machine上:将ZLIB_HOME设置为zlib头文件夹 zlib_unzip_folder \ zlib128-dll \ include 并构建分发。

2)在运行机器上,路径上提供了zlib1.dll zlib_unzip_folder \ zlib128-dll \ zlib1.dll

我使用了zlib 1.2.8,可在此处找到下载链接:http://zlib.net/zlib128-dll.zip

Hadoop 2.4.1

通过将本机lib设置为false并强制压缩映射输出,也可以在旧版本的HADOOP上重现此问题。有关详细信息,请参阅此处:https://issues.apache.org/jira/browse/HADOOP-11334