Вот как я это делаю:
package org.apache.hadoop.mapred;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
public class FinishedJobHelper {
public static Counters getCounters(String jobTrackerHost, int jobTrackerPort, String jobIdentifier, int jobId) throws IOException {
InetSocketAddress link = new InetSocketAddress(jobTrackerHost, jobTrackerPort);
JobSubmissionProtocol client = (JobSubmissionProtocol) RPC.getProxy(JobSubmissionProtocol.class, JobSubmissionProtocol.versionID, link, new Configuration());
return client.getJobCounters(new JobID(jobIdentifier, jobId));
}
}
Пакет должен быть org.apache.hadoop.mapred
(не меняйте его), поскольку JobSubmissionProtocol
защищенный интерфейс. Проблема с этим методом в том, что вы не можете получить задания, которые «вышли на пенсию». Поэтому я предпочитаю не переходить на это и нажимать на счетчики, как только работа завершается.
...
job.waitForCompletion(true);
//get counters after job completes and push them elsewhere
Counters counters = job.getCounters();
...
Надеюсь, это поможет.