Mapreduce combinefileinputformat java.lang.reflect.InvocationTargetException,而两个作业访问相同的数据

时间:2014-11-25 05:24:43

标签: hadoop mapreduce invocationtargetexception recordreader

Hadoop Mapreduce CombineFileInputFormat在读取大量小文件时效果很好,但是我注意到有时候作业失败并出现以下异常,

  

了java.lang.RuntimeException:   java.lang.reflect.InvocationTargetException at   org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.java:164)   在   org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.nextKeyValue(CombineFileRecordReader.java:67)   在   org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:483)   在   org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:76)   在   org.apache.hadoop.mapreduce.lib.map.WrappedMapper $ Context.nextKeyValue(WrappedMapper.java:85)   在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:139)at   org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)at at   org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)at 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:415)at   org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation。

我注意到只有当其他mapreduce作业同时在相同的数据上运行时才会发生这种情况,否则它会按预期工作。

当我在类似条件下运行hive查询时,甚至会生成相同的异常。

我一直在寻找解决方案或可能的原因。

1 个答案:

答案 0 :(得分:1)

最后我得到了这个问题的原因,实际上我一直在使用CombineFileInputFormat和gzip,所以第一个runnning作业是在同一个文件夹中提取gzip文件并在完成时删除它,但是当我运行另一个工作时并行地,它还将文件解压缩为其输入中的firstjob。

因此,在执行第二个作业之间,解压缩的文件被第一个作业删除,这实际上是导致错误。

与hive类似。