我正在运行一个mapreduce工作流,它当前由两个链接的mr任务组成。在第一个任务中,Map程序写入自定义计数器。我想在第二个任务中的reducer的setup()方法中读取这个计数器的值。当我在第二个任务中尝试读取计数器的值时,得到的值为 0
.
为清楚起见,每个任务都有自己的驱动程序代码,并且有自己的驱动程序代码 Configuration
以及 Job
. 计数器定义为 static enum
在主驱动程序类中,它负责链接任务(并启动emr集群,而不是在单节点集群设置中本地运行工作流)。
我正在使用hadoop2.7.3和java8。
2条答案
按热度按时间nhaq1z211#
我看到至少3个选项:
将计数器值写入hdfs文件。作业完成后删除它。
在作业之间共享配置,将计数器值放入配置中。
从主驱动程序中的第一个作业计数器读取计数器值,将其放入第二个作业配置中
作业完成后读取计数器:
p5fdfcr12#
我会把柜台写给Zookeeper。请查看hadoop权威指南以了解更多信息和示例。