Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过API访问Hadoop计数器值?_Java_Hadoop_Mapreduce_Counter - Fatal编程技术网

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

Java 如何通过API访问Hadoop计数器值?,java,hadoop,mapreduce,counter,Java,Hadoop,Mapreduce,Counter,在Hadoop中,我们可以在map/reduce任务中增加计数器,如下所示: ... context.getCounter(MyCountersEnum.SomeCounter).increment(1); ... 您可以在日志中找到它们的值 作业完成后,如何从代码中访问它们 什么是Hadoop API来读取计数器值?我刚刚找到了答案 您需要作业对象才能访问计数器: Counters counters = job.getCounters(); Counter counter = counter

在Hadoop中,我们可以在map/reduce任务中增加计数器,如下所示:

...
context.getCounter(MyCountersEnum.SomeCounter).increment(1);
...
您可以在日志中找到它们的值

作业完成后,如何从代码中访问它们

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

我刚刚找到了答案

您需要作业对象才能访问计数器:

Counters counters = job.getCounters();
Counter counter = counters.findCounter(MyCountersEnum.SomeCounter);
System.out.println(counter.getDisplayName() + ": " + counter.getValue());

计数器表示由Map Reduce框架或应用程序定义的全局计数器

每个计数器可以是任何枚举类型。 您可以将计数器定义为驱动程序类中的枚举

static enum UpdateCount{
  CNT
 }
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"
 }
}
然后在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);
 }
}
c给出计数器值

你可以找到一个例子