我在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');
答案 0 :(得分:0)
它可能与损坏的文件有关。
您可以使用mapred.max.map.failures.percent
设置(或mapred.max.reduce.failures.percent
但这与您的案例无关)来控制您忽略的失败百分比。
问题是单个映射器可以读取多个gz文件,这样一个损坏映射器的损坏文件,使它跳过也没问题的文件。