【问题标题】:Get number of input records in Hadoop reducer获取 Hadoop reducer 中的输入记录数
【发布时间】:2015-07-15 23:47:50
【问题描述】:

在我的 reducer 中,我需要映射器处理的输入“行”总数。

样本输入:

  • line,1,of,input
  • line,2,of,input
  • line,3,of,input

因此,在所有 Reducer 中,我需要访问 Mappers 发出的任何内容加上总行数(在本例中为 3)。

我假设我需要多个作业或将一些映射器和/或减速器链接在一起,但我不确定正确的方法。

注意:这不是一个简单的平均程序,所以我不能只从映射器中获得一个键。

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue() 获取记录总数。

    【讨论】:

      【解决方案2】:

      你需要的是一个计数器:https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/Counters.html

      Hadoop 预定义了一组标准计数器(包括映射器处理的行数,这可能是您要查找的),但您也可以定义自己的自定义计数器。以下是如何执行此操作的示例:Accessing a mapper's counter from a reducer

      【讨论】:

      • 谢谢,这正是我所需要的。
      【解决方案3】:

      假设你没有指定自定义的 Record Reader,你只需要在你的 reducer 的 setupconfigure 方法中获取计数器 MAP_INPUT_RECORDS 的值(根据你使用的是新的,还是旧的 API 分别)。

      有关这两个 API 的说明,请参阅 this postthis post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 2012-08-18
        • 2015-12-14
        • 1970-01-01
        • 2017-01-28
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多