mapred.map.tasks.speculative.execution boolean true 如果任务运行变慢,该属性决定了是否要启动一个map任务的另外一个实力
mapred.reduce.tasks.speculative.execution boolean true 如果任务运行变慢,该属性决定这是否需要启动一个reduce任务
yarn.app.mapreduce.am.job.speculator.class class org.apache.hadoop.mapreduce.v2.app.speculate.default.speculator speculator类实现推测执行策略
yarn.app.mapreduce.am.job.estimator.class class org.apache.hadoop.mapreduce.v2.app.speculate.LegacyTaskRuntimeEstimator speculator实力使用TaskRuntime Estimator的实现,提供任务运行时间的估计值(只针对MR)
为什么会想到关闭推测执行呢?
推测执行的目的是减少作业执行时间,但这是以集群效率为代价的, 在一个繁忙的集群中, 推测执行会减少整体的吞吐量,因为冗余的任务执行时会减少作业的执行时间,因此一些集群管理员倾向于在集群上关闭这个选项, 而让用户根据个别的作业需要而开启该功能, hadoop的老版本更加如此
对于reduce任务,关闭推测执行是有益的, 因为任意重复的reduce任务都是必须要去的map输出作为最先的任务, 这坑农会大幅度的增加集群上的网络传输。