映射器任务的输出何时从本地文件系统中删除?它们会一直持续到整个工作完成,还是在更早的时间被删除?
3 回答
除了 map 和 reduce 任务之外,还创建了另外两个任务:作业设置任务和作业清理任务。它们由 tasktrackers 运行,用于运行代码以在任何 map 任务运行之前设置作业,并在所有 reduce 任务完成后进行清理。为作业配置的 OutputCommitter 确定要运行的代码,默认情况下这是 FileOutputCommitter。对于作业设置任务,它将创建作业的最终输出目录和任务输出的临时工作空间,而对于作业清理任务,它将删除任务输出的临时工作空间。
如果您hadoop.tmp.dir
设置为默认设置(例如 /tmp/),它很可能会受到tmpwatch
操作系统中的任何默认设置的影响。/etc/cron.d/
我建议在、/etc/cron.daily
、等中四处etc/cron.weekly/
寻找,以确切了解您的操作系统默认设置是什么样的。
需要记住的一件事tmpwatch
是,默认情况下,它将键入访问时间,而不是修改时间(即,自 X 以来尚未“触及”的文件将被视为“陈旧”并可能被删除)。但是,使用noatime
和nodiratime
标志挂载文件系统是 Hadoop 的一种常见做法,这意味着访问时间不会得到更新,因此会扭曲您的 tmpwatch 行为。
否则,默认情况下,Hadoop 将清除超过 24 小时(任务完成后)的任务尝试日志。虽然几年前,这篇文章有一些关于默认行为的重要信息。请特别查看引用的部分mapreduce.job.userlog.retain.hours
。
编辑:回复 OP 的评论,这消除了我对这个问题的误解:
至于溢出到磁盘、任何组合器使用并复制到任何减速器的映射任务的中间输出,Hadoop 权威指南有这样的说法:
Tasktrackers 不会在第一个 reducer 检索到 map 输出后立即从磁盘中删除它们,因为 reducer 可能会失败。相反,他们一直等到作业跟踪器告诉他们删除它们,这是在作业完成之后。
我还在下面为@mgs 回答 +1,因为他们已经链接了控制它的源代码并描述了作业清理任务。
所以,是的,地图输出数据在作业完成后立即被删除,无论成功与否,都不会很快。
“Tasktrackers 不会在第一个 reducer 检索到 map 输出后立即从磁盘中删除它们,因为 reducer 可能会失败。相反,它们会等到 jobtracker 告诉他们删除它们,这是在作业完成之后”
Hadoop:权威指南(第 6.4 节)