hadoop中的新任务总是比推测任务具有更高的优先级。
有人能告诉我如何以及在哪里可以更改优先级吗?
Speculator
使用Estimator
来估计任务的运行时间。
控制推测执行的主要配置参数之一是:mapreduce.job.speculative.slowtaskthreshold
(在mapred-site.xml中定义,默认设置为1.0
)。
这个参数的定义是:
任务平均进度的标准偏差数必须低于所有正在运行的任务的平均值被认为太慢。
这意味着,将每个任务的进度率与作业中所有其他任务的"平均进度率"进行比较,并乘以mapreduce.job.speculative.slowtaskthreshold
的值。
让我举个例子来解释一下:
让我们假设有5个地图任务。平均进度率为70%。并且CCD_ 6的值被设置为1.0。
让我们假设其中一个地图任务运行缓慢,其进度率为50%。由于(70 x mapreduce.job.speculative.slowtaskthreshold
)=(70 x 1.0)=70%。因此,50%小于70%,因此此映射任务将被安排用于推测执行(假设mapreduce.map.speculative
设置为true
)。
所以,我想,为了进行积极的推测,您需要将这个mapreduce.job.speculative.slowtaskthreshold
设置为一个更高的值。
但是,即使启用了积极的推测,您也无法在原始任务开始后立即启动多余的任务。因为推测执行只有在一些任务已经启动之后,并且当前任务中的任何一个都滞后(Estimator
将把这个输入提供给Speculator
),才会出现在画面中。因此,也许,您必须更改Speculator
类(org.apache.hadoop.mapreduce.v2.app.speculate.Speculator
)才能实现它
但是,建议不要积极使用它,因为它可能会使其他作业挨饿(如果同一作业由于推测性执行而占用太多映射/减少插槽)。
请查收曲伯乐的这篇文章:http://docs.qubole.com/en/latest/user-guide/hadoop/hadoop1/speculation.html