0

我的用例涉及找出有缺陷的物品……假设我有一个包含数百万个标记为好/有缺陷的 hdfs 物品的产品列表……我想找出前 10 个有缺陷的物品匹配,然后停止。

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

关于如何解决这个问题的任何想法?

4

2 回答 2

1

在 map 任务中找到本地前 10 条记录,发送给 reducer。因此,如果有 7 个映射器,那么 reducer 将获得 70 条记录。reducer 必须对这 70 条记录进行排序并发出全球前 10 条记录。是相同的代码。

请注意,这种方法仅适用于单个减速器,而不适用于 1+ 减速器,这可能是一个瓶颈。另外,mapper之间没有通信,所以没有办法减轻reducer的负担。检查这篇论文,映射器可以使用全局数据相互交谈。IBM BigInsights实现了它。

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

于 2013-03-19T03:25:39.330 回答
0

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

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

于 2013-03-18T23:22:32.233 回答