code: protected boolean isSlowTracker(String taskTracker) {
      if (trackerMapStats.get(taskTracker) != null &&
          trackerMapStats.get(taskTracker).mean() -
          mapTaskStats.mean() > mapTaskStats.std()*slowNodeThreshold) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Tracker " + taskTracker +
              " declared slow. trackerMapStats.get(taskTracker).mean() :" + trackerMapStats.get(taskTracker).mean() +
              " mapTaskStats :" + mapTaskStats);
        }
        return true;
      }
      if (trackerReduceStats.get(taskTracker) != null &&
          trackerReduceStats.get(taskTracker).mean() -
          reduceTaskStats.mean() > reduceTaskStats.std()*slowNodeThreshold) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Tracker " + taskTracker +
              " declared slow. trackerReduceStats.get(taskTracker).mean() :" + trackerReduceStats.get(taskTracker).mean() +
              " reduceTaskStats :" + reduceTaskStats);
        }
        return true;
      }
      return false;
    }
docs: Compares the ave progressRate of tasks that have finished on this
  taskTracker to the ave of all succesfull tasks thus far to see if this
  TT one is too slow for speculating.
  slowNodeThreshold is used to determine the number of standard deviations
  @param taskTracker the name of the TaskTracker we are checking
  @return is this TaskTracker slow