1

映射器任务的输出何时从本地文件系统中删除?它们会一直持续到整个工作完成,还是在更早的时间被删除?

4

3 回答 3

4

除了 map 和 reduce 任务之外,还创建了另外两个任务:作业设置任务和作业清理任务。它们由 tasktrackers 运行,用于运行代码以在任何 map 任务运行之前设置作业,并在所有 reduce 任务完成后进行清理。为作业配置的 OutputCommitter 确定要运行的代码,默认情况下这是 FileOutputCommitter。对于作业设置任务,它将创建作业的最终输出目录和任务输出的临时工作空间,而对于作业清理任务,它将删除任务输出的临时工作空间。

看看OutputCommitter。

于 2013-08-21T11:00:02.427 回答
2

如果您hadoop.tmp.dir设置为默认设置(例如 /tmp/),它很可能会受到tmpwatch操作系统中的任何默认设置的影响。/etc/cron.d/我建议在、/etc/cron.daily、等中四处etc/cron.weekly/寻找,以确切了解您的操作系统默认设置是什么样的。

需要记住的一件事tmpwatch是,默认情况下,它将键入访问时间,而不是修改时间(即,自 X 以来尚未“触及”的文件将被视为“陈旧”并可能被删除)。但是,使用noatimenodiratime标志挂载文件系统是 Hadoop 的一种常见做法,这意味着访问时间不会得到更新,因此会扭曲您的 tmpwatch 行为。

否则,默认情况下,Hadoop 将清除超过 24 小时(任务完成后)的任务尝试日志。虽然几年前,这篇文章有一些关于默认行为的重要信息。请特别查看引用的部分mapreduce.job.userlog.retain.hours

编辑:回复 OP 的评论,这消除了我对这个问题的误解:

至于溢出到磁盘、任何组合器使用并复制到任何减速器的映射任务的中间输出,Hadoop 权威指南有这样的说法:

Tasktrackers 不会在第一个 reducer 检索到 map 输出后立即从磁盘中删除它们,因为 reducer 可能会失败。相反,他们一直等到作业跟踪器告诉他们删除它们,这是在作业完成之后。

资源

我还在下面为@mgs 回答 +1,因为他们已经链接了控制它的源代码并描述了作业清理任务。

所以,的,地图输出数据在作业完成后立即被删除,无论成功与否,都不会很快。

于 2013-08-20T14:53:03.740 回答
1

“Tasktrackers 不会在第一个 reducer 检索到 map 输出后立即从磁盘中删除它们,因为 reducer 可能会失败。相反,它们会等到 jobtracker 告诉他们删除它们,这是在作业完成之后”

Hadoop:权威指南(第 6.4 节)

于 2013-08-21T10:03:02.100 回答