Counters, both built-in and user-defined, are used for counting a variety of values during job execution. For example, built-in Counters monitor the number of processed records and the number of output records for each phase of the map/reduce process. You can also define your own counters using the Counter object's getCounter() method in the task Context. You can increment the userdefined counters locally with the Counter.increment(long) method. At the end of the task execution, the Counter's values are saved in a <task><id>.cnt file. After the job finishes, counters are summed up to the total values, saved in the total.cnt file, and available in the log (main.log).

A summary of counters for the WordCount example, from above, may look like this:
Launched map tasks=3
Launched reduce tasks=3
Map input bad records=0
Map input records=3
Map output records=10
Reduce input groups=6
Reduce input records=10
Reduce output records=6
The following is the full list of built-in Counters:
Table 1. Built-in counter
Group Counter
JOB_COUNTER Launched map tasks.
Launched reduce tasks.
Launched combine tasks.
MAPPER_COUNTERS Map input records.
Map input bad records.
Map output records.
COMBINER_COUNTER Combine input records.
Combine output records.
REDUCER_COUNTERS Reduce input records.
Reduce input groups.
Reduce output records.