Merge -r 1353756:1353757 from trunk to branch. FIXES: MAPREDUCE-4355
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1353760 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d21c6aa52f
commit
df2f723a75
|
@ -6,6 +6,8 @@ Release 2.0.1-alpha - UNRELEASED
|
|||
|
||||
NEW FEATURES
|
||||
|
||||
MAPREDUCE-4355. Add JobStatus getJobStatus(JobID) to JobClient. (kkambatl via tucu)
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
MAPREDUCE-4146. Support limits on task status string length and number of
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
package org.apache.hadoop.mapred;
|
||||
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -28,7 +29,7 @@ import org.apache.hadoop.fs.FileSystem;
|
|||
import org.apache.hadoop.fs.Path;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestJobClientGetJob {
|
||||
public class TestJobClient {
|
||||
|
||||
private static Path TEST_ROOT_DIR =
|
||||
new Path(System.getProperty("test.build.data","/tmp"));
|
||||
|
@ -45,7 +46,7 @@ public class TestJobClientGetJob {
|
|||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void testGetRunningJobFromJobClient() throws Exception {
|
||||
public void testGetRunningJob() throws Exception {
|
||||
JobConf conf = new JobConf();
|
||||
conf.set("mapreduce.framework.name", "local");
|
||||
FileInputFormat.addInputPath(conf, createTempFile("in", "hello"));
|
||||
|
@ -60,4 +61,21 @@ public class TestJobClientGetJob {
|
|||
assertNotNull("New running job", newRunningJob);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void testGetJobStatus() throws Exception {
|
||||
JobConf conf = new JobConf();
|
||||
conf.set("mapreduce.framework.name", "local");
|
||||
FileInputFormat.addInputPath(conf, createTempFile("in", "hello"));
|
||||
Path outputDir = new Path(TEST_ROOT_DIR, getClass().getSimpleName());
|
||||
outputDir.getFileSystem(conf).delete(outputDir, true);
|
||||
FileOutputFormat.setOutputPath(conf, outputDir);
|
||||
JobClient jc = new JobClient(conf);
|
||||
RunningJob runningJob = jc.submitJob(conf);
|
||||
assertNotNull("Running job", runningJob);
|
||||
JobID jobid = runningJob.getID();
|
||||
JobStatus jobStatus = jc.getJobStatus(jobid);
|
||||
assertNotNull("New running job", jobStatus);
|
||||
assertEquals("Equal JobIDs", jobid, jobStatus.getJobID());
|
||||
}
|
||||
}
|
|
@ -620,6 +620,15 @@ public class JobClient extends CLI {
|
|||
}
|
||||
}
|
||||
|
||||
private JobStatus getJobStatusUsingCluster(final JobID jobId)
|
||||
throws IOException, InterruptedException {
|
||||
return clientUgi.doAs(new PrivilegedExceptionAction<JobStatus>() {
|
||||
public JobStatus run() throws IOException, InterruptedException {
|
||||
return JobStatus.downgrade(cluster.getJobStatus(jobId));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private Job getJobUsingCluster(final JobID jobid) throws IOException,
|
||||
InterruptedException {
|
||||
return clientUgi.doAs(new PrivilegedExceptionAction<Job>() {
|
||||
|
@ -628,28 +637,40 @@ public class JobClient extends CLI {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an {@link RunningJob} object to track an ongoing job. Returns
|
||||
* null if the id does not correspond to any known job.
|
||||
* Get {@link JobStatus} of a job. Returns null if the id does not correspond
|
||||
* to any known job.
|
||||
*
|
||||
* @param jobid the jobid of the job.
|
||||
* @param jobid
|
||||
* the jobid of the job.
|
||||
* @return the {@link JobStatus} object to retrieve the job stats, null if the
|
||||
* <code>jobid</code> doesn't correspond to any known job.
|
||||
* @throws IOException
|
||||
*/
|
||||
public JobStatus getJobStatus(JobID jobId) throws IOException {
|
||||
try {
|
||||
return getJobStatusUsingCluster(jobId);
|
||||
} catch (InterruptedException ie) {
|
||||
throw new IOException(ie);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an {@link RunningJob} object to track an ongoing job. Returns null if
|
||||
* the id does not correspond to any known job.
|
||||
*
|
||||
* @param jobid
|
||||
* the jobid of the job.
|
||||
* @return the {@link RunningJob} handle to track the job, null if the
|
||||
* <code>jobid</code> doesn't correspond to any known job.
|
||||
* @throws IOException
|
||||
*/
|
||||
public RunningJob getJob(final JobID jobid) throws IOException {
|
||||
try {
|
||||
|
||||
Job job = getJobUsingCluster(jobid);
|
||||
if (job != null) {
|
||||
JobStatus status = JobStatus.downgrade(job.getStatus());
|
||||
public RunningJob getJob(JobID jobId) throws IOException {
|
||||
JobStatus status = getJobStatus(jobId);
|
||||
if (status != null) {
|
||||
return new NetworkedJob(status, cluster);
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException ie) {
|
||||
throw new IOException(ie);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -172,6 +172,19 @@ public class Cluster {
|
|||
return fs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get JobStatus corresponding to jobId.
|
||||
*
|
||||
* @param jobId
|
||||
* @return object of {@link JobStatus}
|
||||
* @throws IOException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public JobStatus getJobStatus(JobID jobId) throws IOException,
|
||||
InterruptedException {
|
||||
return client.getJobStatus(jobId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get job corresponding to jobid.
|
||||
*
|
||||
|
@ -181,7 +194,7 @@ public class Cluster {
|
|||
* @throws InterruptedException
|
||||
*/
|
||||
public Job getJob(JobID jobId) throws IOException, InterruptedException {
|
||||
JobStatus status = client.getJobStatus(jobId);
|
||||
JobStatus status = getJobStatus(jobId);
|
||||
if (status != null) {
|
||||
return Job.getInstance(this, status, new JobConf(status.getJobFile()));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue