在hadoop ui中,我们可以看到分隔列中的标准MR计数器:map-task,reduce-task和total。
但我在hadoop java API中没有看到这样的方法。我们如何从java api中获取分离的计数器,例如如何获得Map和Reduce列的 CPU花费时间(ms)值?
答案 0 :(得分:1)
如果要获得分离的任务计数器,则需要对hadoop作业使用getTaskReports()方法。之后,您可以使用getTaskCounter()和findCounter()方法分别为每个任务找到所需的计数器。
例如,如何获取地图gc-time-millis计数器:
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) {}
}