当前位置: 首页 > 编程日记 > 正文

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

一、Hadoop中的计数器

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

例如,我们有一个文件,其中包含如下内容:

hello you
hello me

它被WordCount程序执行后显示如下日志:

在上图所示中,计数器有19个,分为四个组:File Output Format CountersFileSystemCountersFile Input Format CountersMap-Reduce Framkework

分组File Input Format Counters包括一个计数器Bytes Read,表示job执行结束后输出文件的内容包括19个字节(空格、换行都是字符),如下所示。

hello 2
me 1
you 1

分组File Output Format Counters包括一个计数器Bytes Written,表示job执行时读取的文件内容包括19个字节(空格、换行都是字符),如下所示。

hello you
hello me

关于以上这段计数器日志中详细的说明请见下面的注释:

 1    Counters: 19 // Counter表示计数器,19表示有19个计数器(下面一共4计数器组)
 2    File Output Format Counters // 文件输出格式化计数器组
 3      Bytes Written=19 // reduce输出到hdfs的字节数,一共19个字节
 4    FileSystemCounters// 文件系统计数器组
 5      FILE_BYTES_READ=481
 6      HDFS_BYTES_READ=38
 7      FILE_BYTES_WRITTEN=81316
 8      HDFS_BYTES_WRITTEN=19
 9    File Input Format Counters // 文件输入格式化计数器组
10      Bytes Read=19 // map从hdfs读取的字节数
11    Map-Reduce Framework // MapReduce框架
12      Map output materialized bytes=49
13      Map input records=2 // map读入的记录行数,读取两行记录,”hello you”,”hello me”
14      Reduce shuffle bytes=0 // 规约分区的字节数
15      Spilled Records=8
16      Map output bytes=35
17      Total committed heap usage (bytes)=266469376
18      SPLIT_RAW_BYTES=105
19      Combine input records=0 // 合并输入的记录数
20      Reduce input records=4 // reduce从map端接收的记录行数
21      Reduce input groups=3  // reduce函数接收的key数量,即归并后的k2数量
22      Combine output records=0 // 合并输出的记录数
23      Reduce output records=3 // reduce输出的记录行数。<helllo,{1,1}>,<you,{1}>,<me,{1}>
24      Map output records=4 // map输出的记录行数,输出4行记录

二、用户自定义计数器

以上是在Hadoop中系统内置的标准计数器。除此之外,由于不同的场景有不同的计数器应用需求,因此我们也可以自己定义计数器使用。

2.1 敏感词记录-准备

现在假设我们需要对文件中的敏感词做一个统计,即对敏感词在文件中出现的次数做一个记录。这里,我们还是以下面这个文件为例:

Hello World!
Hello Hadoop!

文本内容很简单,这里我们指定Hello是一个敏感词,显而易见这里出现了两次Hello,即两次敏感词需要记录下来。

2.2 敏感词记录-程序

在WordCount程序的基础之上,改写Mapper类中的map方法,统计Hello出现的次数,如下代码所示:

        public static class MyMapper extendsMapper<LongWritable, Text, Text, LongWritable> {/** @param KEYIN →k1 表示每一行的起始位置(偏移量offset)* * @param VALUEIN →v1 表示每一行的文本内容* * @param KEYOUT →k2 表示每一行中的每个单词* * @param VALUEOUT →v2表示每一行中的每个单词的出现次数,固定值为1*/protected void map(LongWritable key, Text value,Mapper<LongWritable, Text, Text, LongWritable>.Context context)throws java.io.IOException, InterruptedException {Counter sensitiveCounter = context.getCounter("Sensitive Words:", "Hello");String line = value.toString();// 这里假定Hello是一个敏感词if(line.contains("Hello")){sensitiveCounter.increment(1L);}String[] spilted = line.split(" ");for (String word : spilted) {context.write(new Text(word), new LongWritable(1L));}};}

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

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

2.3 敏感词记录-结果

通过查看控制台日志信息,可以看到如下图所示的信息:

我们可以清楚地看到计数器由原来的19个变为20个,多出来的这个计数器正是我们自定义的敏感词计数器,由于文件中只有两个Hello,因此这里显示Hello=2。

参考资料

(1)Suddenly,《Hadoop日记17-计数器、Map规约与分区》:http://www.cnblogs.com/sunddenly/p/4009568.html

(2)吴超,《Hadoop中的计数器》:http://www.superwu.cn/2013/08/14/460

(3)dajuezhao,《Hadoop中自定义计数器》:http://blog.csdn.net/dajuezhao/article/details/5788705

(4)万川梅、谢正兰,《Hadoop应用开发实战详解(修订版)》:http://item.jd.com/11508248.html

相关文章:

win10安装spacemacs

1、下载emacs最新版 26.1 2、解压emacs到你的安装目录,我的系统是D:/Program File/。执行/bin目录下的addpm.exe 这一步会在开始菜单创建快捷方式 3、在系统环境变量中添加新项HOME(具体环境变量设置方式请自行google)&#xff0c;该变量的路径决定了emacs启动时.emacs.d目录…

【ACM】杭电OJ 2024

注意&#xff1a; 1、getchar() 2、scanf和gets的区别 3、判断条件 C语言的合法标识符 1、由字母&#xff0c;数字&#xff0c;下划线组成 2、且首字符不能是数字 #include <iostream> #include <cstdio> #include <cstring> using namespace std; in…

王振的开发板_Android

任务一&#xff1a; 任务内容&#xff1a;主界面框架的搭建 发布时间&#xff1a;2016-8-26 已完成 任务二&#xff1a; 任务内容&#xff1a;我的 主界面的开发 发布时间&#xff1a;2016-8-27 已完成 任务三&#xff1a; 任务内容&#xff1a;发布界面 动画开发 发布时间&a…

JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构

0. 大背景 众所周知&#xff0c;REST架构已经成为现代服务端的趋势。 很多公司&#xff0c;已经采用REST作为App, H5以及其它客户端的服务端架构。 1. 什么是JAX-RS? JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services&#xff0c;是一个Java 编…

c语言宏嵌套和展开规则

基本原则&#xff1a; 在展开当前宏函数时&#xff0c;如果形参有#或##则不进行宏参数的展开&#xff0c;否则先展开宏参数&#xff0c;再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC)) printf(_TOSTR("test ABC")); print…

【ACM】杭电OJ 2027

注意输出格式&#xff01;&#xff01;&#xff01;&#xff01; #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn 10000; char s1[maxn]; int main () {int n,j,i,a,e,o,u;scanf("%d",&n)…

搜索引擎广告过滤Chrome插件

搜索广告屏蔽Chrome插件:自动过滤&#xff1a;百度&#xff0c;360&#xff0c;搜狗&#xff0c;google&#xff0c;bing的搜索广告&#xff0c;让魏则西的悲剧不再重演。珍爱生命&#xff0c;远离搜索广告&#xff01;下载&#xff1a;FuckAd.zip 安装&#xff1a;方法自行百度…

Scala程序设计:Java虚拟机多核编程实战(国内第一本Scala图书)

Scala程序设计&#xff1a;Java虚拟机多核编程实战(国内第一本Scala图书) 基本信息 作者&#xff1a; (美)Venkat Subramaniam 译者&#xff1a; 郑晔 李剑 丛书名&#xff1a; 图灵程序设计丛书 出版社&#xff1a;人民邮电出版社 ISBN&#xff1a;9787115232953 上架时间&am…

emacs快捷键

https://blog.wozouwokan.com/%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91/2015/07/14/spacemacs/ 超全开发快捷键&#xff1a;https://edward852.github.io/post/%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E7%BC%96%E8%BE%91%E5%99%A8spacemacs/ spc f T快速定位当前文件在neotree中的…

python 小程序,输错三次密码锁定账户

1 [rootsun ~]# cat 7.py 2 #!/usr/bin/python3 # -*- codingUTF-8 -*-4 5 usera_name usera6 usera_passwd aresu7 usera_status on8 userb_name userb9 userb_passwd bresu 10 userb_status on 11 ng 0 12 13 14 name raw_input(请输入用户名&#xff1a;) 15 …

【数据结构】图的深度优先遍历 广度优先遍历

文件操作比直接输入方便许多 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M 20/*邻接表的储存结构*/ typedef struct node /*表结点 或者 边表结点*/ {int adjvex;struct node *next; }edgenode;typedef struct vnode /*头结点*/ …

C++ Primer(第4版)(评注版)

《C Primer(第4版)(评注版)》基本信息原书名&#xff1a; C Primer (4th Edition) 原出版社&#xff1a; Addison-Wesley Professional; 4 edition 作者&#xff1a; (美)Stanley B.Lippman Josee Lajoie Barbara E.Moo 译者&#xff1a; 陈硕 丛书名&#xff1a; 传世经典书丛…

win10安装emacs+spacemacs,建议用官方安装方式

1、下载emacs最新版 26.1 官网下载地址&#xff1a;https://www.gnu.org/software/emacs/download.html#nonfree 2、解压emacs到你的安装目录,我的系统是D:/Program File/。执行/bin目录下的addpm.exe 这一步会在开始菜单创建快捷方式 3、在系统环境变量中添加新项HOME(具体环…

【ACM】杭电OJ 2028

int 会 WA &#xff0c;注意使用 long long 先除后乘&#xff0c;避免超出范围&#xff0c;但好像本题先乘后除也AC #include <iostream> #include <cstdio> #include <cstring>long long lcm(long long a,long long b) {long long c,t,ma,nb;if(a<b) {…

IIS8 添加配置 WCF服务

今天在Windows8.1 操作系统部署了半天的WCF 一直老是在报错、在这里做个记录 防止下次忘记 在网上查了半天。终于知道原来IIS&#xff18;不支持WCF服务SVC的请求。所以必须要给IIS&#xff18;添加WCF服务 的Managed Handler。 添加步骤&#xff1a; &#xff11;打开IIS&a…

spacemacs各种问题修复方法

快捷键操作时报 tr不是内部命令 ------说明是缺少tr命令&#xff0c;win10可以安装coreutils for gnuwin32工具集&#xff0c;然后把bin目录加到系统path路径即可 没有ispell, flycheck error ------缺少ispell命令&#xff0c;windows下面用aspell替换&#xff0c;需要安装…

2016/08/27 What I Learned About Going Fast at eBay and Google

每天推荐一个英文视频 http://v.qq.com/page/i/2/d/i0...https://www.youtube.com/watch... 本日看点

【ACM】杭电OJ 2030

注意getchar()的使用&#xff0c;以及汉字占两个字节&#xff0c;因为比较特殊&#xff0c;可以单独记忆 #include <iostream> #include <cstdio> #include <cstring> int main () {char c;int n,i,sum;scanf("%d",&n);getchar();while(n--)…

背景图自适应屏幕居中显示,且不变形

html&#xff1a;<div classitem><div class container /> </div> css:.item {width: 100%;height: 100%;.container {max-width: 100%;height: auto;min-height: 600px; // 这里可监听屏幕变化&#xff0c;改变最小高度position: absolute;left: 50%;top:…

emacs按键绑定详解

key-binding: https://crazylxr.github.io/spacemacas-zh_CH-doc/binding-keys.html 概述&#xff1a;Emacs的键绑定方式看起来花样繁多&#xff0c;其本质上都是同一个机制 (define-key keymap key def) 这里的key是你要绑定的键。keymap是这个key所属的集合&#xff0c;不…

【面试】重建二叉树

一、描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树&#xff0c;假设输入的前序遍历和中序遍历的结果中都不含重复的数字&#xff0c;例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出该二叉树。二叉树结…

【ACM】杭电OJ 2034

开了三个数组 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <set> #include <algorithm> using namespace std; const int maxn 105; int a[maxn],b[maxn],c[maxn];…

Android 依赖库发布(上传 Library 到 JCenter)gradle最高支持4.4

1.注册 Bintray 注册时要注意哦&#xff0c;千万不要注册成组织的账户&#xff0c;一定要注册为个人。因为组织账户只有一个月的免费使用时间。 个人账户注册地址&#xff1a;bintray.com/signup/oss 有Github、Google、Twitter账号的可以直接登录哦 2.创建Maven仓库&#xff0…

emacs参考资料整理

spacemacs dired模式用法: https://blog.slegetank.com/blog/20170106-dired.htmlEmacs文件管理神器--dired常用操作说明 - 暗无天日快捷键用法&#xff1a;https://yuyang0.github.io/notes/spacemacs.htmlemacs官方参考手册&#xff1a;https://www.gnu.org/software/emacs/m…

Codeigniter文件上传类型不匹配错误

Codeigniter的文件上传类方便了我们使用PHP来处理文件上传的操作&#xff0c;使用起来非常简单&#xff0c;如下&#xff1a;$config[upload_path] ./uploads/;$config[allowed_types] gif|jpg|png;$config[max_size] 100;$config[max_width] 1024;$config[max_height] …

【ACM】杭电OJ 2036(待更)

AC代码 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <set> #include <algorithm> using namespace std; const int maxn 105; double a[maxn][3]; int main () {in…

Spring_boot_pom.xml和启动方式

spring-boot-starter-parent 整合第三方常用框架信息(各种依赖信息) spring-boot-starter-web 是Springboot整合SpringMvc Web 实现原理:Maven依赖继承关系 相当于把第三方常用maven依赖信息,在parent项目中已经封装好了 提供依赖信息关联整合的jar包 springboot中快速原理…

ubuntu18安装virtualbox

1. 报错No rule to make target arch/x86/tools/relocs_32.c 解决办法&#xff1a;sudo apt install linux-source sudo apt-get install linux-headers-5.4.0-42:i386 安装步骤&#xff1a; https://blog.csdn.net/AAMahone/article/details/86428040 安装完成后&…

10分钟学会php面相对象基础(Ⅰ)

<?php 声明一个类 class mycar{ etc. //成员方法 } class mycar{ function drive(){ etc. } } ?> 对象的实例化 内存中分栈和堆&#xff0c;栈定长&#xff0c;堆较大不能直接访问。实例化后&#xff0c;实例名称放在栈内&#xff0c;实例放在堆内&#xff0c;通过实例…

【ACM】杭电OJ 2039

先让啊、三边边长a&#xff0c;b&#xff0c;c按从小到大顺序排列&#xff0c;然后再用两边之和大于第三边&#xff0c;两边之差小于第三边来判断 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib&…