当前设置/增加hadoop计数器的方法只接受long
值。
例如:increment(long incr)
和setValue(long value)
是我从Hadoop Javadocs中抽出的两个方法。
我的要求是存储更复杂类型的信息作为计数器的一部分(作为键/值对)。此信息可能涉及(string, string)
键、值对。
我如何使用Hadoop计数器实现这一点?如果这是不可能的,Hadoop/MR中是否有其他的数据结构/设施允许存储这样的杂项信息,可以通过指定job_id等来检索。
谢谢,参数
计数器可以工作,因为计数是计数的总和。每个任务都有自己的计数器,可以向上聚合。字符串不完全具有相同类型的信息(如何增加字符串?)。
查看ZooKeeper。它非常适合存储各种信息和在进程之间进行协调。您可以创建一个表示作业运行的znode(也许是job_id ?),然后将单个字符串作为子字符串。
由于Hadoop Counters只支持string,因此可以使用map和reduce函数中的OutputCollector.collect(K,V)对键值对进行统计。
这样做的好处是,使用OutputCollector的来自映射器的统计信息可以在reducer函数中进一步处理(像聚合一样)。来自reducer的统计数据只被写入指定的输出格式,不进行任何处理。