问题导读: 1.如何自定义计数器? 2.计数器有多少个? 3.计数器分为几种? 计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况。
1. 内置计数器我们运行上一章中的例子,看一下计数器的输出内容,如图6-1 图6-1 在图6-1中,计数器有19个,分为四个组:File Output Format Counters、FileSystemCounters、File Input Format Counters和Map—Reduce Framkework。 分组File Input Format Counters包括一个计数器Bytes Read,表示job执行结束后输出文件的内容包括19个字节(空格、换行都是字符)。 分组File Output Format Counters包括一个计数器Bytes Written,表示job执行时读取的文件内容包括19个字节(空格、换行都是字符)。
2. 自定义计数器以上分析的是系统内置的标准计数器。除此之外,我们也可以自己定义计数器使用。在上一章例子中,我们打算在map方法中统计空行记录的数量。代码如图6-2。 图6-2 在图6-2中,我们首先通过Mapper.Context类直接获得计数器对象。这里有两个形参,第一个是计数器组的名称,第二是计数器的名称。然后通过第62行判断是否存在空行。如果有,进入条件判断语句块,调用计数器对象的increment方法。执行输出如图6-3所示。 图6-3 在这里,计数器是20个,多了一个计数器组“Error Rows”,多了一个计数器“Empty Row”。
|