MapReduce学习(六):内部标准和自定义计数器

1. Hadoop计数器定义

计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析。

Hadoop的计数器共分为两类:

内部标准计数器:hadoop内部自动提供的,即:执行hadoop任务时,自动会计数。

自定义计数器:用户根据自己的需要,通过代码主动控制某些敏感数据的计数。

2. 内部标准计数器

(1)例如之前的WordCount程序:当此程序执行时,hadoop会在后台自动出现如下信息:

MapReduce学习(六):内部标准和自定义计数器

(2)在上图所示中,计数器有38个,分为如下几个组及介绍如下:

File System Counters :文件系统计数器组

Map-Reduce Framkework: MapReduce框架

File Input Format Counters:文件输入格式化计数器组,即: map从hdfs读取的字节数

File Output Format Counters:文件输出格式化计数器组,即: reduce输出到hdfs的字节数

3. 用户自定义计数器

(1)自定义计数器的场景应用举例:

现在假设我们需要对文件中的敏感词做一个统计,即对敏感词在文件中出现的次数做一个记录。比如:文件中出现fuck单词的次数。

(2)自定义计数器的编写步骤:

第一步:通过Mapper.Context类直接获得计数器对象。这里有两个形参,第一个是计数器组的名称,第二是计数器的名称。

第二步:通过String类的contains方法判断是否存在Hello敏感词。如果有,进入条件判断语句块,调用计数器对象的increment方法。

(3)自定义计数器的核心代码:

Counter sensitiveCounter = context.getCounter("Sensitive Words:", "fuck");

String line = value.toString();

// 这里假定fuck是一个敏感词

if(line.contains("fuck")){

sensitiveCounter.increment(1L);

}

4. 用户自定义计数器全部代码

MapReduce学习(六):内部标准和自定义计数器

MapReduce学习(六):内部标准和自定义计数器

5. 用户自定义计数器后台日志效果

MapReduce学习(六):内部标准和自定义计数器


MapReduce学习(六):内部标准和自定义计数器

相关推荐