Hadoop中的推测任务

时间:2015-12-17 19:19:40

标签: hadoop mapreduce

hadoop中的新任务总是比推测任务具有更高的优先级。

有谁能告诉我如何以及在哪里可以更改此优先级?

1 个答案:

答案 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