Hadoop - 有没有办法在作业之间共享自定义计数器?

标签 hadoop

我正在运行一个 MapReduce 工作流,该工作流当前包含 2 个链式 MR 任务。在第一个任务中,映射器写入自定义计数器。我希望在第二个任务中的 reducer 的 setup() 方法中读取这个计数器的值。当我在第二个任务中尝试读取计数器的值时,我得到了 0 的值。

为清楚起见,每个任务都有自己的驱动程序代码,有自己的ConfigurationJob。计数器在主驱动程序类中定义为 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/

相关文章:

hadoop - Hadoop.1.0.3不再工作

hadoop - AWS 实例 distcp 到 s3 - 访问 key

mongodb - Mongo-Hadoop 流式传输

java - Hadoop 在 ld-linux.so 上死掉

hadoop - 从 Windows 使用 Java 访问 HDFS

hadoop - hadoop的classpath在哪里设置

arrays - 计算 Hive 数组中连续日期之间的差异

hadoop - 启动Oozie工作流程时遇到的问题

c++ - Hadoop管道(wordcount)示例失败(hadoop 0.21.0)

java - Hadoop 2.6.0浏览文件系统Java