为什么有时mapreduce平均减少时间是负数?

时间:2016-05-25 02:13:28

标签: hadoop mapreduce yarn

我在hadoop集群上运行mapreduce作业。我在浏览器中看到的作业运行时间:8088和master:19888(作业历史服务器Web UI)如下所示:

主:8088

master:8088

主:19888

master:19888

我有两个问题:

  1. 为什么两张照片的经过时间不同?
  2. 为什么有时平均减少时间是负数?

2 个答案:

答案 0 :(得分:0)

这是部分答案,仅适用于问题1!

我看到"已提交"和"开始"第二张图片中的8秒,而时间"开始"在第一张图片中等于"已提交"第二次的时间。我想这涵盖了你所看到的8秒差异" Elapsed"时间。

我对第二个问题也很好奇,但这也不是巧合,也是8秒。

答案 1 :(得分:0)

看起来Average Reduce Time基于先前任务(shuffle / merge)完成的时间,而不一定是reduce实际运行所花费的时间。

查看此source code,您可以看到第300行附近发生的相关计算。

if (attempt.getState() == TaskAttemptState.SUCCEEDED) {
  numReduces++;
  avgShuffleTime += (attempt.getShuffleFinishTime() - attempt.getLaunchTime());
  avgMergeTime += attempt.getSortFinishTime() - attempt.getShuffleFinishTime();
  avgReduceTime += (attempt.getFinishTime() - attempt.getSortFinishTime());
}

其次是:

if (numReduces > 0) {
  avgReduceTime = avgReduceTime / numReduces;
  avgShuffleTime = avgShuffleTime / numReduces;
  avgMergeTime = avgMergeTime / numReduces;
}

看看你的数字,它们似乎与计算运行时间(一切都转换为秒)的方法一致:

Total Pre-reduce time = Map Run Time + Ave Shuffle + Ave Merge
143 = 43 + 83 + 17

Ave Reduce Time = Elapsed Time - Total Pre-reduce
-10 = 133 - 143

因此,看看MapShuffleMergeElapsed相比有多长时间,我们最终会得到一个接近-8的负数