在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
}
然后在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发送访问令牌。