hadoop映射中的全局值减少

时间:2013-03-18 22:38:46

标签: hadoop mapreduce hdfs

我的用例涉及找出有缺陷的物品...说我有hdfs中有数百万件物品的产品清单标记为好/有缺陷....我想找出有缺陷物品的前10个匹配然后停止。

我正在考虑使用计数器来执行此操作,但看起来计数器都在任务跟踪器级别...所以每个任务跟踪器都维护它自己的计数器副本,在作业完成之前,它不会真正聚合。因此,如果另一个地图已经找到了10个项目,那么在一个分割的地图作业中运行的计数器将不知道。

有关如何解决这个问题的想法吗?

2 个答案:

答案 0 :(得分:1)

在地图任务中查找本地前10名记录并将其发送到reducer。因此,如果有7个映射器,则减速器将获得70个记录。 reducer必须对这70个记录进行排序,并发出全球前10名记录。 Here是相同的代码。

请注意,此方法仅适用于单个reducer,而不适用于1+ reducer,这可能是一个瓶颈。此外,映射器之间没有通信,因此无法减轻减速器的负担。检查此papers,其中映射器可以使用全局数据相互通信。 IBM BigInsights implements它。

检查this博客条目以了解更多模式。

答案 1 :(得分:0)

假设您正在使用Hadoop,则计数器也可在全球范围内使用。

但是,我不明白使用Map Reduce解决此问题的原因。