京东商城官网登录,合肥官方网站优化费用,网站框架图片,个人网站的基本风格MapReduce Counter 计数器
概念
在执行MapReduce程序的时候#xff0c;控制台输出日志中通常下面片段#xff0c;可以发现输出信息中的核心词是counter,中文叫做计数器 在执行MapReduce城西过程中#xff0c;许多时候#xff0c;用户希望了解程序的运行情况#xff0c;H…MapReduce Counter 计数器
概念
在执行MapReduce程序的时候控制台输出日志中通常下面片段可以发现输出信息中的核心词是counter,中文叫做计数器 在执行MapReduce城西过程中许多时候用户希望了解程序的运行情况Hadoop中内置的计数器可以手机、统计程序运行中核心信息帮助用户理解程序运行的情况辅助用户诊断故障 这条分段信息表示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、本地文件系统 就比如说FILE指的就是本地文件系统HDFS表示HDFS文件存储系统
相关说明
计数器名字说明BYTE_READ程序从文件系统中读取的字节数BYTES_WRITEN程序往文件系统中协入的字节数READ_OPS文件系统中进行的读操作的数量LARGE_READ_OPS文件系统中进行的大规模读操作的数量WRITE_OPS文件系统中进行写操作的数量(例如CREATE操作、append操作)
Job Counter
主要记录MapReduce任务启动的task情况包括个数、使用资源情况等 File Input/Output Format Counters
主要记录读了多少数据写了多少数据 自定义计数器
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 MapperLongWritable, Text,Text,LongWritable {private Text keyOut new Text();private final LongWritable outnew 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);}}
}输出结果 查看打印日志 为了验证是否全局这里将输入文件复制一份如果是全局的那么我们得到的one_chararcter Counter 的值应该为 可见计数器在这个过程中是全局的