hadoop中的新任务总是比推测任务具有更高的优先级。
有谁能告诉我如何以及在哪里可以更改此优先级?
答案 0 :(得分:0)
Hadoop Speculator
使用Estimator
来估算任务的运行时间。
控制推测执行的主要配置参数之一是:mapreduce.job.speculative.slowtaskthreshold
(在mapred-site.xml中定义,默认设置为1.0
)。
此参数的定义如下:
任务进度的标准偏差数 必须低于任务的所有正在运行的任务的平均值 被认为太慢了。
这意味着,每项任务的进度与工作中所有其他任务的“平均进度”进行比较,并乘以mapreduce.job.speculative.slowtaskthreshold
的值。
让我用例子解释一下:
我们假设有5个地图任务。平均进度率为70%。
mapreduce.job.speculative.slowtaskthreshold
的值设置为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
)才能实现它。
但是,建议不要积极使用它,因为它可能会使其他作业匮乏(如果相同的作业由于推测性执行而占用太多的map / reduce插槽)。
请查看QuBole上的这篇文章:http://docs.qubole.com/en/latest/user-guide/hadoop/hadoop1/speculation.html