code: protected JobDesc create(QualifiedJobId qualifiedJobId, Configuration jobConf,
        String appId, String version, Framework framework, long submitTimeMillis) {
  
      if (null == qualifiedJobId) {
        throw new IllegalArgumentException(
            "Cannot create a JobKey from a null qualifiedJobId.");
      }
  
      // get the user name from the job conf
      String userName = HadoopConfUtil.getUserNameInConf(jobConf);
  
      return new JobDesc(qualifiedJobId, userName, appId, version,
          submitTimeMillis, framework);
    }
docs: Factory method to be used by subclasses.
  
  @param qualifiedJobId
  Identifying the cluster and the jobId. Cannot be null;
  @param jobConf
  the Job configuration of the job
  @param appId
  The thing that identifies an application, such as Pig script
  identifier, or Scalding identifier.
  @param version
  @param framework used to launch the map-reduce job.
  @param submitTimeMillis
  Identifying one single run of a version of an app.
  @return a JobKey with the given parameters and the userName added.