我正在运行一个MapReduce工作流程,该工作流程目前由2个链接的MR任务组成。在第一个任务中,映射器将写入自定义计数器。我希望在第二个任务的reducers的setup()方法中读取此计数器的值。当我尝试在第二个任务中读取计数器的值时,我得到的值为0

为了清楚起见,每个任务都有自己的驱动程序代码,以及自己的ConfigurationJob。计数器在主驱动程序类中定义为static enum,它负责链接任务(并启动EMR集群,而不是在单节点集群设置中本地运行工作流)。

我正在使用Hadoop 2.7.3和Java 8。

最佳答案

我至少看到3种选择:

  • 将计数器值写入hdfs文件。作业完成后将其删除。
  • 在作业之间共享配置,将计数器值放入配置中。
  • 从主驱动程序的第一个作业计数器中读取计数器值,并将其放入第二个作业配置中

  • 在工作完成后读取计数器:
    long val = job.getCounters().getGroup("g").findCounter("c").getValue();
    

    关于hadoop - Hadoop-是否可以在作业之间共享自定义计数器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41483956/

    10-16 23:44