设置/增加hadoop计数器的当前方法只接受long
值。
例如:increment(long incr)
和setValue(long value)
是我从Hadoop Javadocs中提取的两种方法。
我的要求是将更复杂类型的信息存储为计数器的一部分(作为键/值对)。此信息可能涉及(string, string)
键,值对。
如何使用Hadoop计数器实现此目的? 如果无法做到这一点,Hadoop / MR中是否还有其他数据结构/工具允许存储此类misc信息,以后可以通过指定job_id等来检索。
谢谢, PARAMS
答案 0 :(得分:1)
计数器工作,因为计数是计数的总和。每个任务都有自己的计数器,可以汇总到更高的位置。字符串不完全具有相同类型的信息(如何增加字符串?)。
为此查看ZooKeeper。它非常适合存储杂项信息和协调进程。您可以创建一个代表作业运行的znode(也许是job_id?),然后将各个字符串作为子项。
答案 1 :(得分:0)
由于Hadoop计数器仅支持字符串,因此可以使用键/值对来使用地图中的OutputCollector.collect(K,V)收集统计信息并减少函数。
这样做的好处是,mapper使用OutputCollector的统计数据可以在reducer函数中进一步处理(如聚合)。 reducer的统计信息只是写入指定的输出格式而不进行任何处理。