java - 如何通过 API 访问 Hadoop 计数器值?

标签 java hadoop mapreduce counter

在 Hadoop 中,我们可以在 map/reduce 任务中增加计数器,它看起来像这样:

...
context.getCounter(MyCountersEnum.SomeCounter).increment(1);
...

你可以在日志中找到它们的值。

作业完成后如何通过代码访问它们?

什么是读取计数器值的 Hadoop API?

最佳答案

计数器代表全局计数器,由 Map-Reduce 框架或应用程序定义。

每个计数器可以是任何枚举类型。 您可以在 Driver 类中将计数器定义为枚举

static enum UpdateCount{
  CNT
 }

然后在 map/reduce 任务中递增计数器

public class CntReducer extends Reducer<IntWritable, Text, IntWritable, Text>{
 public void reduce(IntWritable key,Iterable<Text> values,Context context)  {
      //do something
      context.getCounter(UpdateCount.CNT).increment(1);
 }
}

并在 Driver 类中访问它们

public int run(String[] args) throws Exception {
 .
 .
 .
 job.setInputFormatClass(TextInputFormat.class);
 job.setOutputFormatClass(TextOutputFormat.class);
 FileInputFormat.setInputPaths(job,in );
 FileOutputFormat.setOutputPath(job, out);
 job.waitForCompletion(true);
 c = job.getCounters().findCounter(UpdateCount.CNT).getValue();
 //Print "c"
 }
}

c 给出计数器值。

你可以找到一个例子here

关于java - 如何通过 API 访问 Hadoop 计数器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325536/

相关文章:

java - 如何使用 Weblogic 访问文件?

Java FileOutputStream 默认创建路径

hadoop - 运行 Hadoop 作业时不是有效的 Jar

java - 为什么 org.apache.hadoop.io.Writable 不能转换为 org.apache.hadoop.io.IntWritable?

hadoop - ozie调度配置单元SemanticException无法确定hdfs://namenode:8020/xxx是否已加密

scala - 使用两个条件过滤列表并创建 map scala

java - Hadoop 设置最大并发 mapreduce 任务在伪模式下不起作用

java - Android 许可证验证响应包含什么用户 ID?

hadoop - 有没有Louvain方法的hadoop实现?

java - swing 避免重写 jframe 选项