2
在hadoop ui中,我们可以看到标准MR计数器在分隔列中:map-task,reduce-task和total。如何从Hadoop java API获取特定的MR计数器?
但我没有看到hadoop java API这样的方法。我们如何才能从java api分离计数器,例如如何获得CPU花费的时间(毫秒)值为Map和Reduce列?
在hadoop ui中,我们可以看到标准MR计数器在分隔列中:map-task,reduce-task和total。如何从Hadoop java API获取特定的MR计数器?
但我没有看到hadoop java API这样的方法。我们如何才能从java api分离计数器,例如如何获得CPU花费的时间(毫秒)值为Map和Reduce列?
如果你想得到分离的任务计数器,你需要使用getTaskReports()方法到你的hadoop工作。之后,您可以使用getTaskCounter()和findCounter()方法分别为每个任务找到您需要的计数器。
例如,如何让你的地图GC-时间米利斯计数器:
Long result = 0L;
TaskReport[] taskReports = job.getHadoopJob().getTaskReports(TaskType.MAP);
for (TaskReport taskReport : taskReports) {
try {
result += taskReport.getTaskCounters().findCounter(TaskCounter.GC_TIME_MILLIS).getValue();
} catch (Exception ignored) {}
}