我想从映射器外部向hadoop计数器添加一些东西。因此,我想像这样访问context对象上的getCounter:
context.getCounter(counter, key).increment(amount)
我无法从开始作业的位置获取上下文对象。我只能这么做
job.getCounters().findCounter()
这不会让我在hadoop计数器中添加任何东西。
发布于 2012-09-28 18:50:47
您只能从映射器/减少器任务中使用/写入计数器。作业跟踪器内置了与计数器交互的功能,您不会真的想要干扰已经很复杂的设置。
几个月前,我就遇到过这个问题,当时我试图使用计数器来存储临时信息,但我决定将需要的信息写入到定义的hdfs目录中,并在作业完成后读取该信息。
EDIT:为什么要在映射器的之外使用计数器?
EDIT #2:如果你想要一个已完成的任务的统计数据,那么计数器不是合适的地方,因为a)一旦任务跟踪器收集完数据,它们似乎就不是可写的,b)它们旨在用于聚合任务之间的指标。我最近也有类似的需求,endedup在作业设置类中(在我的边缘节点上)执行统计求和,然后将数据写入日志。
https://stackoverflow.com/questions/12645652
复制相似问题