在我的reducer中,我需要映射器处理的输入"行"的总数。
样本输入:- 行,1,输入
- 线2,输入
- 线3,输入
所以,在所有的reducer中,我需要访问由Mappers 加上发出的任何东西的总行数(在本例中为3)。
我假设我将需要多个工作或链接在一起一些映射器和/或减少,但我不确定正确的方式。
注意:这不是一个简单的平均程序,所以我不能只从映射器中获得一个键。
job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue()
获取记录总数
这里需要的是一个计数器:https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/Counters.html
Hadoop预定义了一组标准计数器(包括映射器处理的行数,这可能是您正在寻找的),但您也可以定义自己的自定义计数器。下面是如何做到这一点的一个示例:从reducer
假设您没有指定自定义Record Reader,您只需要在您的reducer的setup
或configure
方法中获得计数器MAP_INPUT_RECORDS
的值(分别基于您使用的是新API还是旧API)。
请参阅这篇文章和这篇文章,了解这两个api的说明