MapReduce学习(六):内部标准和自定义计数器
1. Hadoop计数器定义
计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析。
Hadoop的计数器共分为两类:
内部标准计数器:hadoop内部自动提供的,即:执行hadoop任务时,自动会计数。
自定义计数器:用户根据自己的需要,通过代码主动控制某些敏感数据的计数。
2. 内部标准计数器
(1)例如之前的WordCount程序:当此程序执行时,hadoop会在后台自动出现如下信息:
(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. 用户自定义计数器全部代码
5. 用户自定义计数器后台日志效果
相关推荐
通过实现MapReduce计算结果保存到MySql数据库过程,掌握多种方式保存计算结果的技术,加深了对MapReduce的理解;创建maven项目,项目名称hdfs,这里不再说明。红色部分为增加内容: