code: void init(JobID jobId) {
      this.startTime = JobTracker.getClock().getTime();
      this.id = new TaskID(jobId, isMapTask(), partition);
      this.skipping = startSkipping();
      long speculativeDuration;
      if (isMapTask()) {
        this.speculativeLag = conf.getMapSpeculativeLag();
        speculativeDuration = conf.getMapSpeculativeDuration();
      } else {
        this.speculativeLag = conf.getReduceSpeculativeLag();
        speculativeDuration = conf.getReduceSpeculativeDuration();
      }
  
      // speculate only if 1/(1000 * progress_rate) > speculativeDuration
      // ie. :
      // speculate only if progress_rate < 1/(1000 * speculativeDuration)
  
      if (speculativeDuration > 0) {
        this.maxProgressRateForSpeculation = 1.0/(1000.0*speculativeDuration);
      } else {
        // disable this check for durations <= 0
        this.maxProgressRateForSpeculation = -1.0;
      }
      
      this.useProcessingRateForSpeculation = 
          conf.getBoolean("mapreduce.job.speculative.using.processing.rate", 
              false);
    }
docs: Initialization common to Map and Reduce