默认计数器

  1. import org.apache.hadoop.mapreduce.TaskCounter; //MapReduce计数器
  2. import org.apache.hadoop.mapreduce.FileSystemCounter; //文件系统计数器
  3. import org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter; // .FileInputFormat计数器
  4. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormatCounter;// FileOutputFormat计数器
  5. import org.apache.hadoop.mapreduce.JobCounter;// job任务计数器

    自定义计数器

  6. context.getCOunter(“计数器类型”, “计数器名字”) // 声明计数器 计数器 .increment(1l)

  7. 通过枚举实现

    案列都是wordcount只是在逐渐叠加内容 这里就不放全部代码了

    代码演示

    ```java //我是声明在map里面得 所以结果表示得是 有多少行数据进入了map

//声明对象 Counter counter = context.getCounter(“MySym”, “MapRow”); //每一次加一 counter.increment(1L); //输出结果 /**

  • MySym MapRow=3 */

    1. ```java
    2. // //我是声明在reduce里面得 结果没有理解为什么是 8
    3. public static enum Counter{
    4. //声明枚举
    5. My_Reduce, ReduceRow
    6. }
    7. // 在类中使用
    8. context.getCounter(Counter.My_Reduce).increment(1L);
    9. // 输出结果
    10. /**
    11. * MapReduce_one.JobMain$IntSumReducer$Counter
    12. * My_Reduce=8
    13. */

    map类全部代码

    1. public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
    2. private static final IntWritable one = new IntWritable(1);
    3. private Text word = new Text();
    4. public TokenizerMapper() {
    5. }
    6. public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
    7. StringTokenizer itr = new StringTokenizer(value.toString(), ",");
    8. Counter counter = context.getCounter("MySym", "MapRow");
    9. counter.increment(1L);
    10. while(itr.hasMoreTokens()) {
    11. this.word.set(itr.nextToken());
    12. context.write(this.word, one);
    13. }
    14. }
    15. }

    reduce类全部代码

    1. public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    2. public static enum Counter{
    3. My_Reduce, ReduceRow
    4. }
    5. private IntWritable result = new IntWritable();
    6. public IntSumReducer() {
    7. }
    8. public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
    9. int sum = 0;
    10. IntWritable val;
    11. context.getCounter(Counter.My_Reduce).increment(1L);
    12. for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
    13. val = (IntWritable)i$.next();
    14. }
    15. this.result.set(sum);
    16. context.write(key, this.result);
    17. }
    18. }

    总结

    计数器是为了我们更好得统计数据和查找错误 是很有必要掌握清楚得一种手段