当前位置: 首页 > news >正文

MapReduce高级篇——全局计数器

MapReduce Counter 计数器

概念

在执行MapReduce程序的时候,控制台输出日志中通常下面片段,可以发现输出信息中的核心词是counter,中文叫做计数器

image-20230418165024962

在执行MapReduce城西过程中,许多时候,用户希望了解程序的运行情况,Hadoop中内置的计数器可以手机、统计程序运行中核心信息,帮助用户理解程序运行的情况,辅助用户诊断故障

image-20230418165251221

这条分段信息,表示Map有2条数据记录输入、4条数据记录输出

内置计数器

Hadoop为每个MapReduce作业维护了一些内置的计数器,报告程序执行时各种信息指标,用户可以根据这些信息进行判断程序:执行逻辑是否合理、执行结果是否正确

Hadoop内置计数器根据功能进行分组(counter group),每隔分组包括若干个不同的计数器

Hadoop计数器都是MapReduce程序中全局的计数器,根MapReduce分布式运算没有关系,不是所谓的局部信息统计

内置counter group包括:MapReduce任务计时器[Map-Reduce Framework] 、文件系统计数器[File System Counters]、作业计数器[Job Counter]、输入文件计数器[File Input Format Counter] 、输出文件计数器[File Output Format Counter]

Map-Reduce Framewor

MapReduce任务计时器

该组计时器主要统计MapReduce框架执行中各个阶段的输入输入信息

计数器名字说明
MAP_INPUT_RECORDS所有mapper已处理的输入记录数
MAP_OUTPUT_RECORDS所有mapper产生的输出记录数
MAP_OUTPUT_BYTES所有mapper产生的未压缩的输出数据字节数
COMBINE_INPUT_RECORDS所有combiner(如果有) 已经处理的输入记录数
COMBINE_OUT_RECORDS所有combiner(如果有) 已经产生的输入记录数

与Reduce相关的

计数器名字说明
REDUCE_INPUT_GROUPS所有reducer已处理分组的个数
REDUCE_INPUT_RECORDS所有reducer已经处理的输入记录的个数,每当某个reducer的迭代器读一个值时,该计数器的值就会增加
REDUCE_OUTPUT_RECORDS所有reducer输出记录数
REDUCE_SHUFFLE_BYTESShuffle时复制到reduce的字节数

File System Counters

文件系统的计数器会针对不同的文件系统使用情况进行统计,比如HDFS、本地文件系统

image-20230418171529203

就比如说FILE指的就是本地文件系统,HDFS表示HDFS文件存储系统

相关说明:

计数器名字说明
BYTE_READ程序从文件系统中读取的字节数
BYTES_WRITEN程序往文件系统中协入的字节数
READ_OPS文件系统中进行的读操作的数量
LARGE_READ_OPS文件系统中进行的大规模读操作的数量
WRITE_OPS文件系统中进行写操作的数量(例如CREATE操作、append操作)

Job Counter

主要记录MapReduce任务启动的task情况,包括:个数、使用资源情况等

image-20230418172926412

File Input/Output Format Counters

主要记录读了多少数据,写了多少数据

image-20230418173031606

自定义计数器

Hadoop内置的计数器还是比较全面的,给作业运行过程的监控带来了方便,但是对于一些业务中的特定要求,比如统计程序执行中某种情况出现的次数统计,内置无法实现,因此MapReduce提供了用户编写自定义计数器的方法。最重要的是计数器是全局统计的,避免了用户自己维护全局变量的不利性。

自定义计数器的使用

通过context.getCounter方法获取一个全局计数器,创建的时候要指定计数器所属的组名核计数器的名字

package MapReduceTest;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Counter;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;
import java.util.Arrays;/*** @author wxk*/
public class WordMapper extends Mapper<LongWritable, Text,Text,LongWritable> {private Text keyOut =new Text();private final LongWritable out=new LongWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//自定义指针,组为wxk_counter 名称为 one_character CounterCounter counter = context.getCounter("wxk_counter","one_character Counter");String [] worlds = value.toString().split("\\s+");System.out.println(Arrays.toString(worlds));for (String word : worlds){// 判断长度是否为1,如果为1则计数器就加1if (word.length() == 1){//Counter提供的增加方法counter.increment(1);}keyOut.set(word);context.write(keyOut,out);}}
}

输出结果:

image-20230419082731231

查看打印日志:

image-20230419082838795

为了验证是否全局,这里将输入文件复制一份,如果是全局的,那么我们得到的one_chararcter Counter 的值应该为:

image-20230419082953375

可见计数器在这个过程中是全局的

http://www.lryc.cn/news/60946.html

相关文章:

  • 轻松掌握K8S目录持久卷PV/PVC的kubectl操作知识点04
  • Appuploader证书申请教程
  • acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器
  • Linux 性能优化大全!
  • 精通 TensorFlow 2.x 计算机视觉:第一部分
  • mulesoft MCIA 常用词汇、知识点汇总
  • Python 单样本学习实用指南:1~6 全
  • 心血管疾病数据探索分析
  • Pandas的应用-1
  • 【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)
  • 【Spring】Spring @Import注解的使用和源码分析
  • C++中的类与对象
  • 探索Qt图像处理的奥秘:从入门到精通
  • springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统
  • 设计模式-模板模式在Java中的使用示例
  • 回溯算法及其应用
  • 如何一步步打造完美的成绩查询系统平台?
  • P1026 [NOIP2001 提高组] 统计单词个数
  • CTFHub | eval执行
  • IP协议头
  • 【xxl-job定时任务框架详解】
  • 7、在vscode上利用cmake构建多文件C++工程
  • Linux操作系统网络模块
  • 不同批次板子采集到的传感器压力值不同
  • 设计模式--原型模式
  • C++智能指针shared_ptr详解
  • 家政服务APP小程序开发功能详解
  • 【C++】deque的实现原理简单介绍
  • UWB隧道人员定位技术应用,施工作业安全精准保障
  • 15.2 矩阵链乘法