为什么有时mapreduce Average Reduce Time 是负数?

Why sometimes the mapreduce Average Reduce Time is a negative number?

我 运行 hadoop 集群上的 mapreduce 作业。我在master:8088和master:19888(job history server web UI)浏览器中看到的job的运行ning时间如下:

master:8088

master:19888

我有两个问题:

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

这是部分答案,仅针对问题 1!

我在第二张图片中看到 "Submitted" 和 "Started" 相差 8 秒,而第一张图片中的时间 "Started" 等于 "Submitted"秒的时间。我想这涵盖了您认为 "Elapsed" 时间的 8 秒差异。

第二个问题我也很好奇,不过也不是巧合,也是8秒

看起来 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 相比花费了多长时间,我们最终得到一个接近于 [=21] 的负数=].