/// <exception cref="System.IO.IOException"/> public Job(LocalJobRunner _enclosing, JobID jobid, string jobSubmitDir) { this._enclosing = _enclosing; this.systemJobDir = new Path(jobSubmitDir); this.systemJobFile = new Path(this.systemJobDir, "job.xml"); this.id = jobid; JobConf conf = new JobConf(this.systemJobFile); this.localFs = FileSystem.GetLocal(conf); string user = UserGroupInformation.GetCurrentUser().GetShortUserName(); this.localJobDir = this.localFs.MakeQualified(new Path(new Path(conf.GetLocalPath (LocalJobRunner.jobDir), user), jobid.ToString())); this.localJobFile = new Path(this.localJobDir, this.id + ".xml"); // Manage the distributed cache. If there are files to be copied, // this will trigger localFile to be re-written again. this.localDistributedCacheManager = new LocalDistributedCacheManager(); this.localDistributedCacheManager.Setup(conf); // Write out configuration file. Instead of copying it from // systemJobFile, we re-write it, since setup(), above, may have // updated it. OutputStream @out = this.localFs.Create(this.localJobFile); try { conf.WriteXml(@out); } finally { @out.Close(); } this.job = new JobConf(this.localJobFile); // Job (the current object) is a Thread, so we wrap its class loader. if (this.localDistributedCacheManager.HasLocalClasspaths()) { this.SetContextClassLoader(this.localDistributedCacheManager.MakeClassLoader(this .GetContextClassLoader())); } this.profile = new JobProfile(this.job.GetUser(), this.id, this.systemJobFile.ToString (), "http://localhost:8080/", this.job.GetJobName()); this.status = new JobStatus(this.id, 0.0f, 0.0f, JobStatus.Running, this.profile. GetUser(), this.profile.GetJobName(), this.profile.GetJobFile(), this.profile.GetURL ().ToString()); this._enclosing.jobs[this.id] = this; this.Start(); }