MapReduce的全局计数器

1.1、介绍

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

MapReduce 计数器(Counter)为我们提供一个窗口,用于观察 MapReduce Job 运行期的各种细节数据。对MapReduce性能调优很有帮助,MapReduce性能优化的评估大部分都是基于这些 Counter 的数值表现出来的。

MapReduce 自带了许多默认Counter,现在我们来分析这些默认Counter 的含义,方便大家观察 Job 结果,如输入的字节数、输出的字节数、Map端输入/输出的字节数和条数、Reduce端的输入/输出的字节数和条数等

1.2、需求

在实际生产代码中,常常需要将数据处理过程中遇到的不合规数据行进行全局计数,类似这种需求可以借助MapReduce框架中提供的全局计数器来实现

1.3、场景介绍

现在我们通过全局计数器来实现,统计一个目录下的所有文件或者一个文件中的总行数和总单词数



1.4、代码实现

package com.ghgj.mazh.mapreduce.counter;import java.io.IOException;import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Counter;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordAndLineCounter {/*** mapreduce全局计数器,是用枚举类进行计数器的定义* COUNT_LINES用来统计总行数, * COUNT_WORDS用来统计总单词数*/enum MyCouterWordCount {COUNT_WORDS, COUNT_LINES}// 驱动程序public static void main(String[] args) throws Exception {// 指定hdfs相关的参数Configuration conf = new Configuration();Job job = Job.getInstance(conf);// 设置jar包所在路径job.setJarByClass(WordAndLineCounter.class);job.setMapperClass(WordAndLineCounterMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);// 本地路径Path inputPath = new Path("D:\\bigdata\\wordcount\\input");FileInputFormat.setInputPaths(job, inputPath);Path outputPath = new Path("D:\\bigdata\\wordcount\\output");FileSystem fs = FileSystem.get(conf);if (fs.exists(outputPath)) {fs.delete(outputPath, true);}FileOutputFormat.setOutputPath(job, outputPath);// 最后提交任务boolean waitForCompletion = job.waitForCompletion(true);System.exit(waitForCompletion ? 0 : 1);}private static class WordAndLineCounterMapper extends Mapper<LongWritable, Text, Text, LongWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 获取计数器,行数计数器Counter counter = context.getCounter(MyCouterWordCount.COUNT_LINES);// 计数器计数counter.increment(1L);String[] words = value.toString().split(" ");for (String word : words) {if(!StringUtils.isBlank(word)){context.getCounter(MyCouterWordCount.COUNT_WORDS).increment(1L);}}}}
}

1.5、输入数据

hello huangbo
hello xuzheng
hello wangbaoqiang
one two three four five
one two three four
one two three
one two
hello hi

1.6、计算结果

 INFO [main] - Job job_local1030848363_0001 completed successfullyINFO [main] - Counters: 35File System CountersFILE: Number of bytes read=614FILE: Number of bytes written=506970FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0Map-Reduce FrameworkMap input records=8Map output records=0Map output bytes=0Map output materialized bytes=6Input split bytes=104Combine input records=0Combine output records=0Reduce input groups=0Reduce shuffle bytes=6Reduce input records=0Reduce output records=0Spilled Records=0Shuffled Maps =1Failed Shuffles=0Merged Map outputs=1GC time elapsed (ms)=0CPU time spent (ms)=0Physical memory (bytes) snapshot=0Virtual memory (bytes) snapshot=0Total committed heap usage (bytes)=514850816Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0com.ghgj.mazh.mapreduce.counter.WordAndLineCounter$MyCouterWordCountCOUNT_LINES=8COUNT_WORDS=22File Input Format Counters Bytes Read=127File Output Format Counters Bytes Written=8

这就是最后的计算结果:在上面结果中的倒数第5-7行

com.ghgj.mazh.mapreduce.counter.WordAndLineCounter$MyCouterWordCountCOUNT_LINES=8COUNT_WORDS=22

各位看官,有没有看懂的,如果有疑问的地方,可以举手提问。

MapReduce--2--MapReduce全局计数器相关推荐

  1. 什么是MapReduce?MapReduce整体架构搭建使用介绍

    文章目录 前言 MapReduce 入门 MapReduce的核心思想 MapReduce yarn Yarn伪分布式搭建 MapReduce编码 需求 MapReduce2.0工作机制 MapRed ...

  2. 2.2.1 hadoop体系之离线计算-mapreduce分布式计算-mapreduce架构概念

    目录 1.写在前面 2.为什么需要MapReduce? 3.MapReduce具体细节 3.1 Hadoop MapReduce构思: 4.block,split,map,reduce关系 5.Shu ...

  3. Hadoop教程(四):理解MapReduce、MapReduce计数器和连接、MapReduce Hadoop程序连接数据

    本教程中的代码分为 3 个部分: 解释 SalesMapper 类 解释 SalesCountryReducer 类 解释 SalesCountryDriver 类 SalesMapper类的说明 在 ...

  4. 什么是MapReduce?MapReduce的运行机制是什么?MapReduce的实现过程

    1. MAPREDUCE原理篇(1) Mapreduce是一个分布式运算程序的编程框架,是用户开发"基于hadoop的数据分析应用"的核心框架: Mapreduce核心功能是将用户 ...

  5. MapReduce: 提高MapReduce性能的七点建议【译】

    2019独角兽企业重金招聘Python工程师标准>>> 作者是通过这个网站翻译过来的: http://blog.cloudera.com/blog/2009/12/7-tips-fo ...

  6. 【MapReduce】MapReduce工作机制

    一个mapreduce作业,一般分为两阶段执行:map阶段和reduce阶段,下面分别对这两阶段进行介绍. Map阶段 Map阶段又分为五部分:读取文件阶段,MapTask阶段,collect阶段,溢 ...

  7. 什么是MapReduce,MapReduce的工作流程和原理是什么

    一.MapReduce的概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和它 ...

  8. 【Mapreduce】Mapreduce实例——WordCount

    前言 一. MapReduce的工作原理 二.MapReduce框架的作业运行流程 三.实验环境 四.实验内容 五.实验步骤 MapReduce采用的是"分而治之"的思想,把对大规 ...

  9. 【MapReduce】MapReduce读写MySQL数据

    MapReduce读写MySQL数据 数据 代码实现 自定义类来接收源数据 自定义类型来存储结果数据 Mapper阶段 Reducer阶段 Driver阶段 上传运行 打包 上传集群运行 使用MapR ...

最新文章

  1. python box2d_win10+Anaconda3成功使用pip安装Box2d
  2. DMURLConnection
  3. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理
  4. 什么是php工作流,什么是工作流?
  5. ULONGLONG乘法分析
  6. matlab 投票法_张量投票算法及其使用并分析.pdf
  7. ui-router 1.0 001 - resolve, component, sref-active
  8. LCN分布式事务框架实战
  9. 鲲鹏凌云,并行科技Paramon通过华为云鲲鹏云服务兼容性认证
  10. 【目标检测】单阶段算法--YOLOv4详解
  11. 赠书 | 如何建设数据中台?看这份企业数据能力测评就够了!
  12. 清除所有多余的桌面右键菜单
  13. 快速排序法实战入门(推荐)
  14. Django python session配置和用法
  15. 企业微信-通讯录管理-成员管理以及部门管理
  16. 父子id mysql,一道关于数据库(经典父子级 ID 关联)更新题
  17. 家居风水大全[ZT:http://sssyyyccc.blog.hexun.com/2641355_d.html]
  18. 关于泰勒展开的细节-《三体》读后感的读后感...
  19. 怎样完成MES系统实施?
  20. 数仓建模—数据治理的本质与实践

热门文章

  1. 1265-数三角形 ZCMU
  2. 致青春---关于工作生活的一点感想
  3. 程序员春晚 Google I/O ,你知道多少?
  4. day1开始在百度前端技术学院零基础学院学习前端开发
  5. 计算机文化课是指哪几科,文科是指哪几科
  6. odoo的many2many和one2many字段给默认值
  7. 打开微信显示wifi连接到服务器地址,打开微信就能连接附近wifi,可惜大家都不知道,赶紧告诉家人...
  8. 从此不再更新博客,新的博客地址我会在以后公布
  9. 华南师范大学图书馆《乡村振兴战略下传统村落文化旅游设计》新宝藏 ​​​
  10. java集成环信SDK用户注册