Hadoop初学指南(7)--MapReduce自定义计数器

本文主要介绍了MapReduce中的自定义计数器的相关内容。

在上次的单词统计例子中,我们可以看到MapReduce在执行过程中会有很多的控制台输出信息,其中有一个很关键的内容:计数器。如下图:

可以看到最上方的关键字:Counters,这就表示计数器。

在这里,只有一个制表符缩进的表示计数器组,有两个制表符缩进的表示计数器组下的计数器。如File Output Format Counters就表示文件输出的计数器组,里面的Bytes Written表示输出的字符数,在输出的文本中,hello,you,me加起来是10个字符,2,1,1加起来是3个字符,中间在加上3个制表符,前两行中有2个换行符,最后一行有一个结束符,总共19个,跟计数器的19相等。

同时在第4组中,我们可以看到Reduce input records是4,Map output records也是4,说明了Map的输出就是Reduce的输入。

那么这些都是系统的计数器,如何自定义计数器呢?

例如,这里我们要记录一下hello出现的次数,只需要在自己的Mapper中加上计数器的相关内容即可,代码如下:

static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
    protected void map(LongWritable k1, Text v1, Context context) throws java.io.IOException ,InterruptedException {
        Counter helloCounter = context.getCounter("Sensitive Words", "hello");
        String line = v1.toString();
        if(line.contains("hello")){
            helloCounter.increment(1L);
        }
        final String[] splited = line.split(" ");
        for (String word : splited) {
            context.write(new Text(word), new LongWritable(1));
        }
        };
    }

对比原来的mapper,我们发现,只需要通过context获取计数器,然后根据需要记录相关内容即可。

以下是执行过程中控制台输出的内容:

我们可以看到计数器增加到了20个,同时多了自定义计数器组Sensitive Words和组里的计数器hello,输入文件中有两个hello,因此这里hello计数器显示为2。(eclipse显示有限,最后一行没有显示出来,因此截图不全)

Hadoop初学指南(7)--MapReduce自定义计数器

时间: 2024-08-05 23:13:54

Hadoop初学指南(7)--MapReduce自定义计数器的相关文章

Hadoop初学指南(8)--MapReduce中的Combiner操作

本文主要介绍了MapReduce中的Combiner操作. 在MapReduce的执行步骤中,我们一共分了8步,其中Map中的最后一步规约操作就是今天要讲的Combiner. 首先看一下前文中的计数器: 我们可以发现,其中有两个计数器:Combine output records和Combine input records,他们的计数都是0,这是因为我们在代码中没有进行规约操作. 现在我们加入规约操作. 在前文代码(参看http://xlows.blog.51cto.com/5380484/14

Hadoop初学指南(6)--MapReduce的简单实例及分析

本文在上一节的基础上通过一个简单的MR示例对MapReduce的运行流程进行分析. 假设有两行数据,分别是hello you,hello me,我们要统计其中出现的单词以及每个单词出现的次数. 所得的结果为 hello   2 you     1 me      1 (1)大致运行流畅 1.解析成2个<k,v>,分别是<0, hello you><10, hello me>.调用2次map函数. 2.执行map任务 3.map输出后的数据是:<hello,1>

Hadoop初学指南(5)--MapReduce入门

本文将介绍Hadoop中的重点MapReduce的入门知识. (1)MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,在Hadoop中用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单.这两个函数的形参是key.value对,表示函数的输入信息. (2)MR执行流程 客户端的代码会提交给JobTracker,也就是JobTracker接受由用户提交

Hadoop初学指南(10)--ZooKeeper的集群安装和操作

本文简单介绍了ZooKeeper的基本知识. (1)概述 ①什么是ZooKeeper? Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等 ②Zookeeper的角色 ③为什么使用Zookeeper? 大部分分布式应用需要一个主控.协调器或控制器来管理物理分布的子进程(如资源.任务分配等) 目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制 协调程序的

hadoop权威指南 chapter2 MapReduce

MapReduce MapReduce is a programming model for data processing. The model is simple, yet not too simple to express useful programs in. Hadoop can run MapReduce programs written in various languages; in this chapter, we shall look at the same program

Hadoop学习笔记—7.计数器与自定义计数器

一.Hadoop中的计数器 计数器:计数器是用来记录job的执行进度和状态的.它的作用可以理解为日志.我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析. 例如,我们有一个文件,其中包含如下内容: hello you hello me 它被WordCount程序执行后显示如下日志: 在上图所示中,计数器有19个,分为四个组:File Output Format Counters.FileSystemCounters.File Input Format

Hadoop之——自定义计数器

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46057909 1.Mapper类的实现 /** * KEYIN 即k1 表示行的偏移量 * VALUEIN 即v1 表示行文本内容 * KEYOUT 即k2 表示行中出现的单词 * VALUEOUT 即v2 表示行中出现的单词的次数,固定值1 */ static class MyMapper extends Mapper<LongWritable, Text, Text, Lon

Hadoop mapreduce自定义分组RawComparator

本文发表于本人博客. 今天接着上次[Hadoop mapreduce自定义排序WritableComparable]文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需要了解的可以看看我在博客园的评论,现在开始. 首先我们查看下Job这个类,发现有setGroupingComparatorClass()这个方法,具体源码如下: /** * Define the comparator that controls which keys are grouped toge

hadoop权威指南学习(一) - 天气预报MapReduce程序的开发和部署

看过Tom White写的Hadoop权威指南(大象书)的朋友一定得从第一个天气预报的Map Reduce程序所吸引, 殊不知,Tom White大牛虽然在书中写了程序和讲解了原理,但是他以为你们都会部署了,这里轻描淡写给 带过了,这样就给菜鸟们留了课题,其实在跑书中的程序的时候,如果没经验,还是会踩坑的. 这里笔者就把踩过的坑说一下,以防后来人浪费时间了. 1. 首先,你得下载书中的ncdc气象原始数据,这个可以从书中的官网下载. 作者比较做人家,只给了2年的历史数据,无妨,2年也可以运行.