Hadoop推测任务执行

时间:2013-03-01 18:56:31

标签: hadoop mapreduce

在谷歌的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一回事。投机任务是如何实施的?当我开始一个推测性的任务时,任务是从最初的那个开始,慢慢开始,还是从旧的任务到达的地方开始(如果是,它是否必须复制所有中间状态和数据?)< / p>

1 个答案:

答案 0 :(得分:68)

Hadoop系统的一个问题是,通过将任务划分到多个节点,一些慢节点可能会对程序的其余部分进行速率限制。

由于各种原因(包括硬件降级或软件配置错误),任务可能会很慢,但由于任务仍然成功完成,但由于时间比预期的要长,因此可能难以检测到原因。 Hadoop不会尝试诊断和修复运行缓慢的任务;相反,它会尝试检测任务运行速度低于预期的时间,并启动另一个等效的任务作为备份。这被称为推测执行任务。

例如,如果一个节点有一个慢速磁盘控制器,那么它可能只以所有其他节点速度的10%读取其输入。因此,当99个地图任务已经完成时,系统仍在等待最终的地图任务检入,这比其他所有节点都要长得多。

通过强制任务彼此隔离运行,各个任务不知道其输入来自何处。任务信任Hadoop平台,只提供适当的输入。因此,可以并行多次处理相同的输入,以利用机器能力的差异。由于作业中的大多数任务即将结束,Hadoop平台将在几个节点上安排剩余任务的冗余副本,这些节点没有其他工作要执行。此过程称为推测执行。任务完成后,他们会向JobTracker宣布这一事实。任务的任何副本首先完成即成为最终副本。如果其他副本以推测方式执行,Hadoop会告诉TaskTrackers放弃任务并丢弃其输出。然后,Reducers首先从成功完成的Mapper接收输入。

默认情况下启用推测执行。您可以通过分别使用旧API将mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf选项设置为false来禁用映射器和缩减器的推测执行,而对于较新的API,您可以考虑更改mapreduce.map.speculative和{{ 1}}。

所以为了回答你的问题,它确实重新开始,与其他任务完成/完成的程度无关。

参考:http://developer.yahoo.com/hadoop/tutorial/module4.html