当前位置: 首页 > 知识库问答 >
问题:

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

敖毅
2023-03-14

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

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

而不是在日志中找到它们的值。

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

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

共有2个答案

潘星阑
2023-03-14

我刚在这里找到答案。

您需要一个作业对象来访问计数器:

Counters counters = job.getCounters();
Counter counter = counters.findCounter(MyCountersEnum.SomeCounter);
System.out.println(counter.getDisplayName() + ": " + counter.getValue());
龚沛
2023-03-14

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

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

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给出计数器值。

你可以在这里找到一个例子

 类似资料:
  • 我想通过使用Eclipse的OWL API访问我的本体和SWRL规则。有没有人能帮我做一个确切的程序来告诉我该怎么做? 我尝试了以下代码,但似乎没有得到任何响应。请记住,我的Java技能很差。 我需要一个确切的程序来解决这个问题。 我已经有的代码是:

  • 我对谷歌应用编程接口非常陌生,我有麻烦了。我留档谷歌照片APIJava,然后我在谷歌API控制台创建OAuth凭据并下载它(credentials.json文件)。之后,我试图访问谷歌照片。这里是代码从留档: 但是我不明白如何创建凭据对象,将其传递给FixedCreentialsProvider.create()方法 你能给我一些解释/链接吗?

  • 我的Google API有问题。我希望避免通过浏览器检索我的访问授权。我想将代码直接检索到一个变量中。这是我发送的URL:

  • 我正在用Extbase构建一个TYPO3扩展,并希望存储通过httpget获取的数据。现在我正在努力使用浏览器访问动作控制器。 插件被实现到第102页 扩展键是xyzlist 插件名称是xyzlistdb 控制器名称是playlicontroller 操作是getAction 域名是sub.domain。de 在播放控制器中。php仅在getAction下 错误日志(“getAction”,0)

  • 我有一个映射器管道,其中映射函数使用 但我不知道在管道完成后如何访问“mycounter”的值。我看到过使用完成处理程序的示例,但它们似乎引用了一个较旧的mapreduce库,在该库中可以实际定义完成处理程序。 我的最佳猜测是,我需要在管道中定义一个能够访问映射器管道计数器的最后阶段--但具体如何定义呢?

  • 我在Laravel项目中使用Passport包进行API身份验证。 我通过标头传递访问令牌以验证用户操作。但是,我需要通过API URL发送访问令牌。 这样地: http://aarts.net/rest/api/v1/cart?access_token=vIRTPypU16SuMar6xSK1clzGXOGvOwQPX3WoT71A 我需要通过API URL发送访问令牌。