Hadoop推测性任务执行

Hadoop推测性任务执行,hadoop,mapreduce,Hadoop,Mapreduce,在谷歌的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一样的。推测任务是如何实现的?当我开始一个推测性任务时,任务是从一开始就开始,还是从旧任务到达的地方开始(如果是这样,它是否必须复制所有中间状态和数据?Hadoop系统的一个问题是,通过将任务划分到多个节点,少数慢速节点可能会限制程序的其余部分 由于各种原因(包括硬件退化或软件配置错误),任务可能会变慢,但原因可能很难检测,因为任务仍然成功完成,尽管时间比预期的长。Hadoop不尝试诊断和修复运行缓慢的任务

在谷歌的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一样的。推测任务是如何实现的?当我开始一个推测性任务时,任务是从一开始就开始,还是从旧任务到达的地方开始(如果是这样,它是否必须复制所有中间状态和数据?

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

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

例如,如果一个节点的磁盘控制器速度较慢,那么它读取输入的速度可能仅为所有其他节点的10%。因此,当99个映射任务已经完成时,系统仍在等待最后一个映射任务签入,这比所有其他节点都要花更长的时间

通过强制任务彼此独立运行,单个任务不知道其输入来自何处。任务信任Hadoop平台只提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,Hadoop平台将跨多个节点安排剩余任务的冗余副本,这些节点没有其他工作要执行。这个过程称为推测执行。当任务完成时,他们会向JobTracker宣布这一事实。无论任务的哪个副本先完成,都将成为最终副本。如果其他副本是推测性执行的,Hadoop会告诉TaskTracker放弃任务并放弃其输出。然后,还原器首先从成功完成的映射器接收输入

默认情况下启用推测执行。通过使用旧API将
mapred.map.tasks.投机性.execution
mapred.reduce.tasks.投机性.execution
JobConf选项分别设置为false,可以禁用映射程序和还原程序的投机性执行,在使用新的API时,您可以考虑更改<代码> MapReduce。Map.Expasy和<代码> MapReduce。 因此,要回答你的问题,它确实会重新开始,与其他任务完成了多少无关


参考资料:

我认为
mapreduce.map.Prospective
mapreduce.reduce.Prospective
分别是
mapred.map.tasks.Prospective.execution
mapred.reduce.tasks.Prospective.execution
的较新等价物,如果要在系统范围内完全禁用推测性任务执行,原因是什么?禁用投机性执行时可以获得哪些好处。