2013-03-18 40 views
0

我的用例涉及找出有缺陷的物品......说我有一个在hdfs中标记为好/有缺陷的物品的数百万的产品清单....我想要找出前10个有缺陷的物品,然后停止。哈托普地图中的全球价值减少

我正在考虑使用计数器来做到这一点,但它看起来像计数器都在任务跟踪器级别......所以每个任务跟踪器都维护它自己的计数器副本,直到作业完成才会真正聚合。因此,如果另一个地图已经找到了10个项目,那么在一个分组的地图作业中运行的计数器就不会有任何想法。

有关如何解决此问题的任何想法?

回答

1

查找地图任务中的本地前10条记录并将它们发送到减速器。所以,如果有7个mapper,那么reducer将会获得70条记录。减速器必须对这70条记录进行排序并发布全球前10条记录。 Here是相同的代码。

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

检查this博客条目的模式很多。

+0

谢谢Praveen。这真的很有帮助! – 2013-03-19 22:54:55

0

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

但是,我不明白为此问题使用Map Reduce背后的原因。

+0

欢迎来到Stack Overflow!像这样的东西更适合作为评论,当你达到50的声望时,你将能够做出评论。 – 2013-03-18 23:42:06