在谷歌的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一回事.投机任务是如何实施的?当我开始一个推测性的任务时,任务是从最初的那个开始,慢慢开始,还是从旧的任务到达的地方开始(如果是的话,是否必须复制所有的中间状态和数据?)
Ama*_*mar 72
Hadoop系统的一个问题是,通过将任务划分到多个节点,一些慢节点可能对程序的其余部分进行速率限制.
由于各种原因(包括硬件降级或软件错误配置),任务可能会很慢,但由于任务仍然成功完成,因此可能很难检测到原因,尽管在比预期更长的时间之后.Hadoop不会尝试诊断和修复运行缓慢的任务; 相反,它会尝试检测任务运行速度低于预期的时间,并启动另一个等效的任务作为备份.这被称为推测执行任务.
例如,如果一个节点具有慢速磁盘控制器,那么它可能仅以所有其他节点的速度的10%读取其输入.因此,当99个地图任务已经完成时,系统仍在等待最终的地图任务检入,这比所有其他节点花费的时间要长得多.
通过强制任务彼此隔离运行,各个任务不知道其输入来自何处.任务信任Hadoop平台,只提供适当的输入.因此,可以并行多次处理相同的输入,以利用机器能力的差异.由于作业中的大多数任务即将结束,Hadoop平台将在几个节点上安排剩余任务的冗余副本,这些节点没有其他工作要执行.此过程称为推测执行.任务完成后,他们会向JobTracker宣布这一事实.任务的任何副本首先完成即成为最终副本.如果其他副本以推测方式执行,Hadoop会告诉TaskTrackers放弃任务并丢弃其输出.然后,Reducers首先从成功完成的Mapper接收输入.
默认情况下启用推测执行.您可以通过分别使用旧API 将mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.executionJobConf选项设置为false 来禁用映射器和缩减器的推测执行,而对于较新的API,您可以考虑更改mapreduce.map.speculative和mapreduce.reduce.speculative.
所以为了回答你的问题,它确实重新开始,与其他任务完成/完成的程度无关.
参考:http://developer.yahoo.com/hadoop/tutorial/module4.html
| 归档时间: |
|
| 查看次数: |
35496 次 |
| 最近记录: |