我正在运行MapReduce工作流程,该工作流程目前包含2个链式MR任务。在第一个任务中,映射器写入自定义计数器。我希望在第二个任务中的reducers的setup()方法中读取此计数器的值。当我尝试在第二个任务中读取计数器的值时,我得到的值为0
。
为清楚起见,每个任务都有自己的驱动程序代码,其中包含自己的Configuration
和Job
。计数器在主驱动程序类中定义为static enum
,它负责链接任务(以及启动EMR集群,而不是在单节点集群设置中本地运行工作流)。
我正在使用Hadoop 2.7.3和Java 8.
答案 0 :(得分:1)
我看到至少3个选项:
将计数器值写入hdfs文件。工作完成后删除它。
在作业之间共享配置,将计数器值放入配置中。
从主驱动程序中的第一个作业计数器读取计数器值,将其置于第二个作业配置
在工作完成后阅读计数器:
long val = job.getCounters().getGroup("g").findCounter("c").getValue();
答案 1 :(得分:0)
我会把计数器写给ZooKeeper。查看Hadoop Definitive Guide以获取示例。