Timing metrics for mapreduce are not correct. Timing is implemented by wrapping the transform() method and recording the start and end.
However, this is wrong because Transforms are called recursively to ensure records are not buffered in memory. This means the calling emit() actually calls the next stage's transform() method. So the time for the first stage will include the time for every stage after it. In order to time it properly, we would have to stop the stopwatch every time emit() is called, then restart it when emit() returns.