在Google的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一样的。推测任务是如何实现的?当我启动一项推测任务时,该任务是从一开始就作为较旧且缓慢的任务开始,还是从较旧的任务到达的位置开始(如果是这样,是否必须复制所有中间状态和数据?)
Hadoop 系统的一个问题是,通过将任务划分到多个节点,一些慢速节点可能会限制程序其余部分的速率。
任务可能会因各种原因而缓慢,包括硬件性能下降或软件配置错误,但原因可能很难检测,因为任务仍然成功完成,尽管时间比预期更长。 Hadoop 不会尝试诊断和修复运行缓慢的任务;而是尝试诊断和修复运行缓慢的任务。相反,它会尝试检测任务运行速度是否低于预期,并启动另一个等效任务作为备份。这称为任务的推测执行。
例如,如果一个节点具有较慢的磁盘控制器,那么它读取输入的速度可能仅为所有其他节点的 10%。因此,当 99 个 Map 任务已经完成时,系统仍在等待最后一个 Map 任务签入,这比所有其他节点花费的时间要长得多。
通过强制任务彼此隔离运行,各个任务不知道它们的输入来自哪里。任务信任 Hadoop 平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大部分任务即将结束,Hadoop 平台将在多个没有其他工作要执行的节点上安排剩余任务的冗余副本。此过程称为推测执行。当任务完成时,他们向 JobTracker 宣布这一事实。任务的哪个副本首先完成将成为最终副本。如果其他副本正在推测性地执行,Hadoop 会告诉 TaskTracker 放弃任务并丢弃其输出。然后,Reducers 从第一个成功完成的 Mapper 接收输入。
默认情况下启用推测执行。您可以通过设置来禁用映射器和化简器的推测执行mapred.map.tasks.speculative.execution
and mapred.reduce.tasks.speculative.execution
JobConf 选项设置为 false,分别使用旧的 API,而使用较新的 API,您可以考虑更改mapreduce.map.speculative
and mapreduce.reduce.speculative
.
因此,要回答您的问题,它确实会重新开始,并且与其他任务已完成/完成的量无关。
参考:http://developer.yahoo.com/hadoop/tutorial/module4.html http://developer.yahoo.com/hadoop/tutorial/module4.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)