我知道Hadoop将工作划分为独立的块。但是想象一下,如果一个映射器在其他映射器之前完成了其任务的处理,那么主程序是否可以为该映射器提供已经与另一个映射器关联的工作(即某些任务)?如果有,怎么样?
答案 0 :(得分:0)
阅读推测性执行Yahoo Tutorial -
Hadoop系统的一个问题是,通过将任务划分到多个节点,一些慢节点可能对程序的其余部分进行速率限制。例如,如果一个节点具有慢速磁盘控制器,那么它可能仅以所有其他节点的速度的10%读取其输入。因此,当99个地图任务已经完成时,系统仍在等待最终的地图任务检入,这比所有其他节点花费的时间要长得多。 通过强制任务彼此隔离运行,各个任务不知道其输入来自何处。任务信任Hadoop平台,只提供适当的输入。因此,可以并行多次处理相同的输入,以利用机器能力的差异。由于作业中的大多数任务即将结束,Hadoop平台将在几个节点上安排剩余任务的冗余副本,这些节点没有其他工作要执行。此过程称为推测执行。任务完成后,他们会向JobTracker宣布这一事实。任务的任何副本首先完成即成为最终副本。如果其他副本以推测方式执行,Hadoop会告诉TaskTrackers放弃任务并丢弃其输出。然后,Reducers首先从成功完成的Mapper接收输入。 默认情况下启用推测执行。您可以通过将mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution JobConf选项分别设置为false来禁用映射器和缩减器的推测执行。
答案 1 :(得分:0)
雅虎教程信息仅涵盖MapReduce v1,虽然概念相同,但有点过时了。 MR v2的新选项现在是:
mapreduce.map.speculative
mapreduce.reduce.speculative