mapreduce:自定义任务outofmemory失败

时间:2018-04-12 18:55:05

标签: hadoop mapreduce

我有一个仅限地图的作业,每个文件作为一个任务运行。有时,文件会导致任务内存不足类型异常。

想象一下输入目录有10个文件。因此,这项工作将有10项任务。现在想象9个“好”文件将成功,1个“坏”文件会导致内存异常。

理想情况下,我希望将一个“坏”文件移动到隔离目录。 9个“好”文件写入输出。作业成功,并在日志中显示警告。

使用mapreduce.reduce.failures.maxpercent设置可以获得部分成功。

但是当容器因内存不足而失败时,如何将“坏文件”复制到隔离区?

我在想一个自定义的FileOutputCommitter覆盖taskAbort方法会提供正确的钩子。

之前有其他人这样做过吗?

1 个答案:

答案 0 :(得分:1)

我试图在作业历史记录服务器rest api中找到答案,但不幸的是,任务尝试不会存储有关其输入路径的信息。

如果找不到更好的解决方案,可以这样做:

  1. 在hdfs上为您的作业创建一个特殊目录
  2. 映射器设置方法中的
  3. 获取输入拆分名称并将其存储在此目录中的特殊标记文件中
  4. 当mapper成功完成时,在清理方法中删除此标记文件
  5. 作业完成后,检查目录并处理名称中的错误文件