我有一个仅限地图的作业,每个文件作为一个任务运行。有时,文件会导致任务内存不足类型异常。
想象一下输入目录有10个文件。因此,这项工作将有10项任务。现在想象9个“好”文件将成功,1个“坏”文件会导致内存异常。
理想情况下,我希望将一个“坏”文件移动到隔离目录。 9个“好”文件写入输出。作业成功,并在日志中显示警告。
使用mapreduce.reduce.failures.maxpercent
设置可以获得部分成功。
但是当容器因内存不足而失败时,如何将“坏文件”复制到隔离区?
我在想一个自定义的FileOutputCommitter覆盖taskAbort方法会提供正确的钩子。
之前有其他人这样做过吗?
答案 0 :(得分:1)
我试图在作业历史记录服务器rest api中找到答案,但不幸的是,任务尝试不会存储有关其输入路径的信息。
如果找不到更好的解决方案,可以这样做: