core/src/main/java/com/twitter/elephantbird/util/HadoopUtils.java
public static Counter getCounter(JobContext ctx, String group, String counter) {
    if (ctx instanceof TaskInputOutputContext<?, ?, ?, ?>) {
      Counter c = HadoopCompat.getCounter((TaskInputOutputContext<?, ?, ?, ?>) ctx,
          group, counter);
      if (c != null) {
        return c;
      }
    }
    String name = group + ":" + counter;
    LOG.warn("Using a dummy counter for " + name + " because it does not already exist.");
    return HadoopCompat.newGenericCounter(name, name, 0);
  }
public static Counter getCounter(JobContext ctx, String group, String counter) {
    if (ctx instanceof TaskInputOutputContext<?, ?, ?, ?>) {
      Counter c = HadoopCompat.getCounter((TaskInputOutputContext<?, ?, ?, ?>) ctx,
          group, counter);
      if (c != null) {
        return c;
      }
    }
    String name = group + ":" + counter;
    LOG.warn("Using a dummy counter for " + name + " because it does not already exist.");
    return HadoopCompat.newGenericCounter(name, name, 0);
  }
public static Counter getCounter ( JobContext ctx , String group , String counter ) { if ( ctx instanceof TaskInputOutputContext < ? , ? , ? , ? > ) { Counter c = HadoopCompat . getCounter ( ( TaskInputOutputContext < ? , ? , ? , ? > ) ctx , group , counter ) ; if ( c != null ) { return c ; } } String name = group + ":" + counter ; LOG . warn ( "Using a dummy counter for " + name + " because it does not already exist." ) ; return HadoopCompat . newGenericCounter ( name , name , 0 ) ; }
MapReduce counters are available only with {@link TaskInputOutputContext},
but most interfaces use super classes, though the actual object is a
subclass (e.g. Mapper.Context).
<br>
This utility method checks the type and returns the appropriate counter.
In the rare (may be unexpected) case where ctx is not a
TaskInputOutputContext, a dummy counter is returned after printing
a warning.
MapReduce counters are available only with {