我在一些mapreduce工作中遇到这个奇怪的错误
java.io.IOException: invalid distance too far back
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.inflateBytesDirect(Native Method)
at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.decompress(ZlibDecompressor.java:221)
at org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:89)
at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:83)
at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:71)
at java.io.DataInputStream.readByte(DataInputStream.java:248)
at com.contextin.io.VersionedWritable.readFields(VersionedWritable.java:60)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:73)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:44)
at org.apache.hadoop.io.SequenceFile$Reader.deserializeValue(SequenceFile.java:2180)
at org.apache.hadoop.io.SequenceFile$Reader.getCurrentValue(SequenceFile.java:2164)
at org.apache.hadoop.mapred.SequenceFileRecordReader.getCurrentValue(SequenceFileRecordReader.java:103)
at org.apache.hadoop.mapred.SequenceFileRecordReader.next(SequenceFileRecordReader.java:78)
at com.contextin.model.workflow.AggregateFilesMR$CustomKeyValueLineRecordReader.next(AggregateFilesMR.java:632)
at com.contextin.model.workflow.AggregateFilesMR$CustomKeyValueLineRecordReader.next(AggregateFilesMR.java:595)
at org.apache.hadoop.mapred.lib.CombineFileRecordReader.next(CombineFileRecordReader.java:61)
at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:215)
at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:200)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
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:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
一些事实(可能相关也可能不相关):
作业使用CustomCombineFileInputFormat - 也就是说,每个映射器可以处理多个文件
错误确实经常发生,但并非总是如此(因此它似乎不是纯粹的错误或软件错误)
某些数据集会比其他数据集更频繁地导致此错误(因此它似乎至少与数据相关)
但是对于相同的数据集,作业可能有时会成功,有时会失败 - 所以它不是严格意义上的数据问题。
在计算机上运行的某些作业(特别是失败的作业)具有较高的内存要求,这会导致某些任务因内存问题而失败。虽然这个特定的错误似乎与记忆无关。
答案 0 :(得分:1)
从进一步测试来看,它似乎是一个数据问题。 单独读取一些文件(而不是mapreduce)会导致问题一致。
我没有很好地解释为什么任务失败次数在运行之间发生变化