将文本/字符串类型指定为Hadoop计数器的值

时间:2011-10-28 22:29:16

标签: java hadoop cloud mapreduce

设置/增加hadoop计数器的当前方法只接受long值。

例如:increment(long incr)setValue(long value)是我从Hadoop Javadocs中提取的两种方法。

我的要求是将更复杂类型的信息存储为计数器的一部分(作为键/值对)。此信息可能涉及(string, string)键,值对。

如何使用Hadoop计数器实现此目的? 如果无法做到这一点,Hadoop / MR中是否还有其他数据结构/工具允许存储此类misc信息,以后可以通过指定job_id等来检索。

谢谢, PARAMS

2 个答案:

答案 0 :(得分:1)

计数器工作,因为计数是计数的总和。每个任务都有自己的计数器,可以汇总到更高的位置。字符串不完全具有相同类型的信息(如何增加字符串?)。

为此查看ZooKeeper。它非常适合存储杂项信息和协调进程。您可以创建一个代表作业运行的znode(也许是job_id?),然后将各个字符串作为子项。

答案 1 :(得分:0)

由于Hadoop计数器仅支持字符串,因此可以使用键/值对来使用地图中的OutputCollector.collect(K,V)收集统计信息并减少函数。

这样做的好处是,mapper使用OutputCollector的统计数据可以在reducer函数中进一步处理(如聚合)。 reducer的统计信息只是写入指定的输出格式而不进行任何处理。