hadoop减少单个记录数

mqxuamgl  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(398)

当map reduce有多个reducer时,如何获得每个reducer输出文件的单个输出记录计数?
现在我可以使用reduce\u output\u records计数器获得reducer记录器的总数。但如何获得单个减速机计数?我试图在reducer中增加reducer输出记录计数,但无法获取要写入自定义计数器的输出部分文件名。
我在找每个减速机的输出记录。。。假设在总排序顺序分区中,我要计算每个reducer发出的记录数。。。例如,总记录数为7。。2个来自减速器1,5个来自减速器2,这是一种统计。。

j7dteeu8

j7dteeu81#

回答我自己的问题的步骤如下:
在reduce方法中生成一个静态变量“count”,并在reducer发出键值时递增计数器。
在cleanup方法中,创建一个自定义计数器并使用below方法查找减速器零件名称。getconfiguration().getint(“mapreduce.task.partition”,0)for ex:for reducer output filename part-r-00000 above方法返回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);       
}
p1iqtdky

p1iqtdky2#

我希望你是在寻找每个减速机正在处理的记录数。每个减速机为每个键调用一次/根据我的理解,列表的大小就是您需要的大小。然后通过编程,您需要为每个读取的记录发出1作为Map的输出,然后在结果中求和并发出它。
您还可以使用hadoopapi中提供的longsumreducer类。希望这有助于进一步了解

相关问题