我想从mappper外部向hadoop计数器添加一些内容。
因此,我想像这样访问上下文对象上的getCounter:

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

我无法从开始工作的地方获取上下文对象。我只能做
job.getCounters().findCounter()

这不允许我在hadoop计数器中添加一些内容。

最佳答案

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

几个月前,我确实遇到了这个问题,试图使用计数器存储临时信息,但是我决定将所需的信息写到已定义的hdfs目录中,并在工作完成后阅读。

编辑:为什么要在映射器的之外使用计数器?

编辑#2 :如果要从完成的工作中获得统计信息,则计数器不是正确的位置,因为a)一旦作业跟踪器完成数据收集,它们似乎就不可写了; b)打算用于跨任务汇总指标。最近我有一个类似的需求,最终在作业设置类中(在我的边缘节点上)对我的统计信息求和,然后将数据写入日志。

关于hadoop - 如何从映射器或化简器外部增加hadoop计数器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12645652/

10-16 02:57