}
}
public List<ExecJob> execute(PhysicalPlan plan,
String jobName) throws ExecException, FrontendException {
MapReduceLauncher launcher = new MapReduceLauncher();
List<ExecJob> jobs = new ArrayList<ExecJob>();
Map<String, PhysicalOperator> leafMap = new HashMap<String, PhysicalOperator>();
for (PhysicalOperator physOp : plan.getLeaves()) {
log.info(physOp);
if (physOp instanceof POStore) {
FileSpec spec = ((POStore) physOp).getSFile();
if (spec != null)
leafMap.put(spec.toString(), physOp);
}
}
try {
PigStats stats = launcher.launchPig(plan, jobName, pigContext);
for (OutputStats output : stats.getOutputStats()) {
POStore store = output.getPOStore();
String alias = store.getAlias();
if (output.isSuccessful()) {
jobs.add(new HJob(ExecJob.JOB_STATUS.COMPLETED, pigContext, store, alias, stats));
} else {
HJob j = new HJob(ExecJob.JOB_STATUS.FAILED, pigContext, store, alias, stats);
j.setException(launcher.getError(store.getSFile()));
jobs.add(j);
}
}
return jobs;
} catch (Exception e) {
// There are a lot of exceptions thrown by the launcher. If this
// is an ExecException, just let it through. Else wrap it.
if (e instanceof ExecException){
throw (ExecException)e;
} else if (e instanceof FrontendException) {
throw (FrontendException)e;
} else {
int errCode = 2043;
String msg = "Unexpected error during execution.";
throw new ExecException(msg, errCode, PigException.BUG, e);
}
} finally {
launcher.reset();
}
}