有没有一种方法可以在作业之间共享自定义计数器?

dy2hfwbg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(355)

我正在运行一个mapreduce工作流,它当前由两个链接的mr任务组成。在第一个任务中,Map程序写入自定义计数器。我想在第二个任务中的reducer的setup()方法中读取这个计数器的值。当我在第二个任务中尝试读取计数器的值时,得到的值为 0 .
为清楚起见,每个任务都有自己的驱动程序代码,并且有自己的驱动程序代码 Configuration 以及 Job . 计数器定义为 static enum 在主驱动程序类中,它负责链接任务(并启动emr集群,而不是在单节点集群设置中本地运行工作流)。
我正在使用hadoop2.7.3和java8。

nhaq1z21

nhaq1z211#

我看到至少3个选项:
将计数器值写入hdfs文件。作业完成后删除它。
在作业之间共享配置,将计数器值放入配置中。
从主驱动程序中的第一个作业计数器读取计数器值,将其放入第二个作业配置中
作业完成后读取计数器:

long val = job.getCounters().getGroup("g").findCounter("c").getValue();
p5fdfcr1

p5fdfcr12#

我会把柜台写给Zookeeper。请查看hadoop权威指南以了解更多信息和示例。

相关问题