我正在运行一个 MapReduce 工作流,该工作流当前包含 2 个链式 MR 任务。在第一个任务中,映射器写入自定义计数器。我希望在第二个任务中的 reducer 的 setup() 方法中读取这个计数器的值。当我在第二个任务中尝试读取计数器的值时,我得到了 0
的值。
为清楚起见,每个任务都有自己的驱动程序代码,有自己的Configuration
和Job
。计数器在主驱动程序类中定义为 static enum
,它负责链接任务(并启动 EMR 集群,而不是在单节点集群设置中本地运行工作流) .
我正在使用 Hadoop 2.7.3 和 Java 8。
最佳答案
我看到至少 3 个选项:
将计数器值写入 hdfs 文件。作业完成后将其删除。
在作业之间共享配置,将计数器值放在配置中。
从主驱动程序中的第一个作业计数器读取计数器值,将其放入第二个作业配置中
作业完成后读取计数器:
long val = job.getCounters().getGroup("g").findCounter("c").getValue();
关于Hadoop - 有没有办法在作业之间共享自定义计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483956/