code: 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);
    }
docs: 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.