在Pig脚本中加载.gz文件时出错

时间:2014-05-21 22:04:59

标签: hadoop apache-pig

我在HDFS中有大量的.gz文件,我正在尝试使用PigStorage加载它们来处理数据,我得到以下异常

  

java.io.EOFException:输入流的意外结束   org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:137)   在   org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:77)   在java.io.InputStream.read(InputStream.java:85)at   org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:205)   在org.apache.hadoop.util.LineReader.readLine(LineReader.java:169)at   org.apache.hadoop.mapreduce.lib.input.LineRecordReader.nextKeyValue(LineRecordReader.java:139)   在org.apache.pig.builtin.TextLoader.getNext(TextLoader.java:55)at   org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:194)   在   org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:530)   在   org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)   在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)at   org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)at at   org.apache.hadoop.mapred.MapTask.run(MapTask.java:363)at at   org.apache.hadoop.mapred.Child $ 4.run(Child.java:255)at   java.security.AccessController.doPrivileged(Native Method)at   javax.security.auth.Subject.doAs(Subject.java:396)at   org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232)   在org.apache.hadoop.mapred.Child.main(Child.java:249)

这可能是某些文件损坏的结果。

是否有任何类型的错误处理使用我可以跳过损坏的文件。以下是我正在使用的示例代码:

cal  = load '$inputdir/CAL/*/*/*/*/*/*/*.gz' USING PigStorage('\t');

1 个答案:

答案 0 :(得分:0)

它可能与损坏的文件有关。

您可以使用mapred.max.map.failures.percent设置(或mapred.max.reduce.failures.percent但这与您的案例无关)来控制您忽略的失败百分比。

问题是单个映射器可以读取多个gz文件,这样一个损坏映射器的损坏文件,使它跳过也没问题的文件。