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