我知道hadoop将工作划分为独立的chunks。但是想象一下,如果一个Map器在其他Map器之前完成了任务的处理,那么主程序是否可以给这个Map器一个已经与另一个Map器关联的工作(即某些任务)?如果是,怎么做?
j1dl9f461#
阅读雅虎教程-hadoop系统的一个问题是,通过将任务划分到多个节点上,少数慢速节点可能会限制程序的其余部分。例如,如果一个节点有一个慢磁盘控制器,那么它可能只以所有其他节点10%的速度读取其输入。因此,当99个map任务已经完成时,系统仍在等待最后一个map任务签入,这比所有其他节点都要花费更长的时间。通过强制任务彼此独立运行,单个任务不知道其输入来自何处。任务信任hadoop平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,hadoop平台将跨多个没有其他工作要执行的节点调度剩余任务的冗余副本。这个过程称为推测执行。当任务完成时,他们会向jobtracker宣布这一事实。任务的任何一个副本先完成,就成为最终副本。如果其他副本是推测性执行的,hadoop会告诉tasktracker放弃任务并放弃它们的输出。然后,还原器首先从成功完成Map的Map器接收输入。默认情况下启用推测执行。您可以通过将mapred.map.tasks.投机.execution和mapred.reduce.tasks.投机.execution jobconf选项分别设置为false来禁用Map器和还原器的投机执行。
jtjikinw2#
雅虎教程的信息,只涵盖了mapreducev1,是有点过时,虽然概念是相同的。mr v2的新选项现在是:mapreduce.mapmapreduce.reduce.prospectiveMap
2条答案
按热度按时间j1dl9f461#
阅读雅虎教程-
hadoop系统的一个问题是,通过将任务划分到多个节点上,少数慢速节点可能会限制程序的其余部分。例如,如果一个节点有一个慢磁盘控制器,那么它可能只以所有其他节点10%的速度读取其输入。因此,当99个map任务已经完成时,系统仍在等待最后一个map任务签入,这比所有其他节点都要花费更长的时间。通过强制任务彼此独立运行,单个任务不知道其输入来自何处。任务信任hadoop平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,hadoop平台将跨多个没有其他工作要执行的节点调度剩余任务的冗余副本。这个过程称为推测执行。当任务完成时,他们会向jobtracker宣布这一事实。任务的任何一个副本先完成,就成为最终副本。如果其他副本是推测性执行的,hadoop会告诉tasktracker放弃任务并放弃它们的输出。然后,还原器首先从成功完成Map的Map器接收输入。默认情况下启用推测执行。您可以通过将mapred.map.tasks.投机.execution和mapred.reduce.tasks.投机.execution jobconf选项分别设置为false来禁用Map器和还原器的投机执行。
jtjikinw2#
雅虎教程的信息,只涵盖了mapreducev1,是有点过时,虽然概念是相同的。mr v2的新选项现在是:
mapreduce.map
mapreduce.reduce.prospectiveMap