Hadoop减少个人记录计数

时间:2015-06-28 23:54:23

标签: hadoop mapreduce counter

当map reduce有多个reducer时,如何获取每个reducer输出文件的单独输出记录数?

现在我可以使用REDUCE_OUTPUT_RECORDS计数器获得总减速器记录器数。但如何获得个别减速机?我试图在reducer中增加reducer输出记录数,但我无法获得输出部分文件名来写入自定义计数器。

我查找每个减速机的输出记录数...总排序顺序说我想要每个减速机发出的记录数...例如总记录是7 .. 2来自减速机1和5是从减速机2,统计数据..

2 个答案:

答案 0 :(得分:0)

我希望您正在寻找每个reducer正在处理的记录数。为每个键调用每个reducer一次/列表的大小是您根据我的理解所需的大小。然后通过编程,您需要为每个读取的记录发出1作为映射的输出,然后将它们在结果中求和并发出它。

您还可以使用hadoop API中提供的LongSumReducer类。希望this有助于进一步理解

答案 1 :(得分:0)

回答下面我自己的问题的步骤是:

  1. 在reduce方法中创建一个静态变量“count”,并在从reducer发出一个键值时递增计数器。
  2. 在清理方法中,创建一个自定义计数器并使用以下方法查找reducer部件名称。 getConfiguration()。getInt(“mapreduce.task.partition”,0) 对于ex:对于reducer输出文件名part-r-00000上面的方法返回0
  3. 因此,使用此功能,我们可以识别不同的减少部分文件计数。

    以下是代码:

    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);       
    }