让我们考虑一下这样的情况,当我在Map器中更改计数器的值,并希望在还原器中使用这些信息时。看起来我们保证在所有Map程序完成之前不会调用reduce函数。这是否考虑到了正在推测执行的Map器?由于推测性执行,是否可以看到不相关的值?
knsnq2tg1#
减速器的执行时间由配置参数决定: mapreduce.job.reduce.slowstart.completedmaps (在mapred site.xml中)。默认设置为“0.05”。这意味着,当大约5%的Map程序完成时,还原程序就被安排执行。可以调整此参数以获得不同的结果。例如,将其设置为“1.0”将确保只有在100%的Map器完成后才能启动减速器。redcuer任务将开始从已完成执行的Map器复制数据。但是,这个 reduce() 方法,只有当来自所有Map器的数据被reducer复制时才会调用。这个链接:reduce tasks什么时候在hadoop中开始?清楚地解释了这个过程。至于推测执行,它只在Map器/还原器的情况下触发,与其他Map器/还原器相比,Map器/还原器是落后的。如果相同的Map器示例重复执行,并不意味着计数器也重复。为每个任务尝试维护任务计数器。如果任务尝试失败或终止(由于推测性执行),则会丢弃该尝试的计数器。因此,投机性执行不会对整体计数器值产生影响。您必须记住的一点是,计数器值只有在作业成功完成后才是确定的。
mapreduce.job.reduce.slowstart.completedmaps
reduce()
1条答案
按热度按时间knsnq2tg1#
减速器的执行时间由配置参数决定:
mapreduce.job.reduce.slowstart.completedmaps
(在mapred site.xml中)。默认设置为“0.05”。这意味着,当大约5%的Map程序完成时,还原程序就被安排执行。可以调整此参数以获得不同的结果。例如,将其设置为“1.0”将确保只有在100%的Map器完成后才能启动减速器。
redcuer任务将开始从已完成执行的Map器复制数据。但是,这个
reduce()
方法,只有当来自所有Map器的数据被reducer复制时才会调用。这个链接:reduce tasks什么时候在hadoop中开始?清楚地解释了这个过程。
至于推测执行,它只在Map器/还原器的情况下触发,与其他Map器/还原器相比,Map器/还原器是落后的。如果相同的Map器示例重复执行,并不意味着计数器也重复。为每个任务尝试维护任务计数器。如果任务尝试失败或终止(由于推测性执行),则会丢弃该尝试的计数器。因此,投机性执行不会对整体计数器值产生影响。
您必须记住的一点是,计数器值只有在作业成功完成后才是确定的。