文章目录
1. 什么是全局计数器
计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况。
MapReduce 计数器(Counter)为我们提供一个窗口,用于观察 MapReduce Job 运行期的各种细节数据。对MapReduce性能调优很有帮助,MapReduce性能优化的评估大部分都是基于这些 Counter 的数值表现出来的。
例如wordcount过程中,统计输入数据条数:
4个小文件,4个maptask
wc0.txt——maptask0——27
wc1.txt——maptask1——27
wc2.txt——maptask2——27
wc3.txt——maptask3——27
输入数据条数=4个maptask输入条数之和 27*4=108
观察下边输出 Map input records=108
mpareduce中的默认的计数器统计的参数:
每一个mapreduce的job执行完成都会有一个计数器统计的报文:
File System Counters 文件系统的计数器 文件系统的读写字节
FILE: Number of bytes read=6761
FILE: Number of bytes written=1510365
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=8736
HDFS: Number of bytes written=75
HDFS: Number of read operations=46
HDFS: Number of large read operations=0
HDFS: Number of write operations=7
Map-Reduce Framework mapreduce计算框架的计数器
Map input records=108 map的输入的数据条数
Map output records=552 map输出的数据条数 context.write()调用的次数 单词的个数552
Map output bytes=4704 map的输出的字节
Map output materialized bytes=440 map输出的元数据字节
Input split bytes=360 输入切片的大小
Combine input records=552 combine输入的数据条数=map输出
Combine output records=40 combine输出的数据条数=reduce的输入
Reduce input groups=10 reduce的输入的数据组
Reduce shuffle bytes=440
Reduce input records=40
Reduce output records=10 reduce的输出的数据条数
Spilled Records=80 溢写的数据条数 40原始数据 40元数据
Shuffled Maps =4
Failed Shuffles=0
Merged Map outputs=4
GC time elapsed (ms)=10
Total committed heap usage (bytes)=2426929152
Shuffle Errors shuffle错误的计数器
BAD_ID=0
CONNECTION=0
IO_ERROR=0 IO是否有错误
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=2496
File Output Format Counters
Bytes Written=75
2. 常用全局计数器
MapReduce 自带了许多默认Counter,现在我们来分析这些默认 Counter 的含义,方便大家观察 Job 结果,如输入的字节数、输出的字节数、Map端输入/输出的字节数和条数、Reduce端的输入/输出的字节数和条数等。下面我们只需了解这些内置计数器,知道计数器组名称(groupName)和计数器名称