如何访问hadoop MapReduce中的内置计数器

如何访问hadoop MapReduce中的内置计数器,hadoop,mapreduce,Hadoop,Mapreduce,我一直在使用MAP_INPUT_records变量查找所有映射程序解析的总记录数。 以下是我正在使用的代码: Counters counters = job.getCounters(); for (CounterGroup group : counters) { System.out.println("* Counter Group: " + group.getDisplayName() + " (" + group.getName() + ")");

我一直在使用MAP_INPUT_records变量查找所有映射程序解析的总记录数。 以下是我正在使用的代码:

    Counters counters = job.getCounters();
    for (CounterGroup group : counters) {
          System.out.println("* Counter Group: " + group.getDisplayName() + " (" + group.getName() + ")");
          System.out.println("  number of counters in this group: " + group.size());
          for (Counter counter : group) {
            System.out.println("  - " + counter.getDisplayName() + ": " + counter.getName() + ": "+counter.getValue());
          }
        }
此外,我还尝试使用以下代码段: {

}

但每次它都会抛出以下错误:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.CounterGroup, but class was expected
    at com.ssga.common.riskmeasures.validation.mr.RiskMeasuresValidationDriver.run(RiskMeasuresValidationDriver.java:169)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at com.ssga.common.riskmeasures.validation.mr.RiskMeasuresValidationDriver.main(RiskMeasuresValidationDriver.java:189)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
PS:我在驾驶课程中的job.waitForCompletion(true)之后尝试使用上述方法。 有没有办法解决这个问题

提前谢谢。 Akhilesh

“新API更喜欢抽象类而不是接口,因为它们更容易发展。例如,您可以在不破坏class2的旧实现的情况下向抽象类添加方法(带有默认实现)。例如,旧API中的Mapper和Reducer接口是新API中的抽象类。”

“新API位于org.apache.hadoop.mapreduce包(及其子包)中。 旧API仍然可以在org.apache.hadoop.mapred中找到。“

-Hadoop由Tom White编写的权威指南,第3版,第28页



检查映射器和减速器,将它们用作类

如果解决了问题,请接受答案:)
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.CounterGroup, but class was expected
    at com.ssga.common.riskmeasures.validation.mr.RiskMeasuresValidationDriver.run(RiskMeasuresValidationDriver.java:169)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at com.ssga.common.riskmeasures.validation.mr.RiskMeasuresValidationDriver.main(RiskMeasuresValidationDriver.java:189)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)