当map reduce有多个reducer时,如何获得每个reducer输出文件的单个输出记录计数?
现在,我可以使用REDUCE_OUTPUT_RECORDS计数器获得还原器记录器的总计数。但是如何获得单个减速器的数量?我试图在reducer中增加reducer输出记录计数,但无法获得要写入自定义计数器的输出部件文件名。
我正在查找每个减速器的输出记录。。。假设在总排序顺序分区中,我想要每个减少器发出的记录数。。。例如,总记录为7..2来自reductor 1,5来自reducter 2,这是一种统计信息。。
我希望您正在查找每个reducer正在处理的记录数。每个reducer对每个键调用一次/根据我的理解,列表的大小就是你需要的。然后通过编程,您需要为每个读取的记录发出1作为映射的输出,然后在结果中求和并发出
您还可以使用hadoop API中提供的LongSumReducer类。希望这有助于进一步理解
回答我自己的问题的步骤如下:
- 在reduce方法中创建一个静态变量"count",并在从reducer发出键值时递增计数器
- 在cleanup方法中,创建一个自定义计数器,并使用下面的方法查找减速器零件名称。getConfiguration().getInt("mapreduce.task.dartition",0)例如:对于reducer输出文件名part-r-000000,上面的方法返回0
因此,使用此功能,我们可以识别不同的减少零件文件数。
以下是代码:
MyReduce extends Reducer<..>{
private static int count = 0;
reduce(..){
<your code>
:
count++;
context.write(..);
}
@Override
cleanup(Context output){
output.getCounter("RecordCounter","Reducer-no-"+output.getConfiguration().getInt("mapreduce.task.partition",
0)).increment(count);
}