Definition
Counter
Counter是hadoop mapreduce framework所提供的一个工具,用来追踪mapreduce job的进度。
Counter表示全局的计数器,由MapReduce framework或者Application定义。每一个Counter有一个与之相关联的name和long类型的value。Counter通过Enum类来定义,Enum类定义一个CounterGroup, 每个field顶一个一个Counter的name.
CounterGroup
CounterGroup是由逻辑上属于一个group的所有的Counter所组成。一个CounterGroup对应一个枚举类,每一个Counter对应枚举类里面的一个枚举值。下面这段代码是Counter和CounterGroup的一个例子,在这个例子中,FileSystemCounter是一个枚举类,对应于FileSystemCounter这个CounterGroup,这个CounterGroup里面包含多个Counter,BYTES_READ是其中一个Counter。
public enum FileSystemCounter {
BYTES_READ,
BYTES_WRITTEN,
READ_OPS,
LARGE_READ_OPS,
WRITE_OPS,
BYTES_READ_EC,
}
Usage
Counter主要用来记录事件发生的次数。Hadoop mapreduce counter会追踪如下事件:
- job里面包含的map/reduce任务数量
- job read/write多少个字节
- map/reduce launched/failed/killed count
- cpu/memory usage of job
Counter types
总体上来讲,Counter分为built-in counter和customized counter两大类,built-in counter是mapreduce framework定义的counter,customized counter是用户在mapreduce application中自己定义的counter,下面我们以此介绍这些counter。
Built-in Counter
Built-in counter也就是hadoop mapreduce framework为每一个job定义的counter,用来上报和job相关的统计信息。举个例子,可以使用built-in counter来记录读/写了多个少字节,读/写了多少记录,通过这些统计信息我们可以确认,预期数量的输入被处理了,预期数量的输出被生产了。
TaskCounter
TaskCounter可以用来追踪每个task进度,是由每个TaskAttempt维护,会周期性的把counter发送给ApplicationMaster,然后在全局范围类做聚合。如下所示,我们会对比较重要的Counter的含义通过注释进行说明。
public enum TaskCounter {
MAP_INPUT_RECORDS,
MAP_OUT