2

我想从映射器外部向 hadoop 计数器添加一些东西。所以,我想像这样访问上下文对象上的 getCounter:

context.getCounter(counter, key).increment(amount)

我无法从我开始工作的地方获取上下文对象。我只能做

job.getCounters().findCounter()

这不允许我向 hadoop 计数器添加一些东西。

4

1 回答 1

1

您只能在 mapper/reducer 任务中使用/写入计数器。作业跟踪器内置了与计数器交互的功能,您真的不想干扰已经很复杂的设置。

几个月前我遇到了这个问题,试图使用计数器来存储临时信息,但我决定将我需要的信息写入定义的 hdfs 目录并在我的工作完成后读取它。

编辑:为什么和你想在映射器之外使用计数器?

编辑#2:如果你想要完成工作的统计数据,那么计数器不是适合的地方,因为a)一旦工作跟踪器完成收集数据,它们似乎就不可写了,b)它们打算被使用用于跨任务聚合指标。我最近有类似的需求,最终在作业设置类(在我的边缘节点上)中进行了统计汇总,然后将数据写入日志。

于 2012-09-28T18:50:46.613 回答