code: public TrackableJobFuture cancel() {
          String jobId = getConfiguration().getJobId();
          TrackableJobFuture future = jobTracker.unregisterTrackableJob(jobId);
          MapCombineTask mapCombineTask = jobTracker.unregisterMapCombineTask(jobId);
          if (mapCombineTask != null) {
              mapCombineTask.cancel();
          }
          ReducerTask reducerTask = jobTracker.unregisterReducerTask(jobId);
          if (reducerTask != null) {
              reducerTask.cancel();
          }
          mapReduceService.destroyJobSupervisor(this);
          return future;
      }
docs: /*
  public boolean cancelNotifyAndRestart() {
  Cancel all partition states
  jobProcessInformation.cancelPartitionState();
  
  Notify all other nodes about cancellation
  Set<Address> addresses = collectRemoteAddresses();
  
  Now notify all involved members to cancel the job
  asyncCancelRemoteOperations(addresses);
  
  Kill local tasks
  String jobId = getConfiguration().getJobId();
  MapCombineTask mapCombineTask = jobTracker.unregisterMapCombineTask(jobId);
  if (mapCombineTask != null) {
  mapCombineTask.cancel();
  }
  ReducerTask reducerTask = jobTracker.unregisterReducerTask(jobId);
  if (reducerTask != null) {
  reducerTask.cancel();
  }
  
  Reset local data
  jobProcessInformation.resetPartitionState();
  reducers.clear();
  remoteReducers.clear();
  context.set(null);
  keyAssignments.clear();
  
  Restart
  TODO restart with a new KeyValueJob
  
  return true;
  }