Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我的用例涉及找出有缺陷的物品……假设我有一个包含数百万个标记为好/有缺陷的 hdfs 物品的产品列表……我想找出前 10 个有缺陷的物品匹配,然后停止。
我正在考虑使用计数器来执行此操作,但看起来计数器都在任务跟踪器级别......所以每个任务跟踪器都维护它自己的计数器副本,在工作完成之前不会真正聚合。因此,如果另一个地图已经找到这 10 个项目,则在拆分的地图作业中运行的计数器不会有任何想法。
关于如何解决这个问题的任何想法?
在 map 任务中找到本地前 10 条记录,发送给 reducer。因此,如果有 7 个映射器,那么 reducer 将获得 70 条记录。reducer 必须对这 70 条记录进行排序并发出全球前 10 条记录。这是相同的代码。
请注意,这种方法仅适用于单个减速器,而不适用于 1+ 减速器,这可能是一个瓶颈。另外,mapper之间没有通信,所以没有办法减轻reducer的负担。检查这篇论文,映射器可以使用全局数据相互交谈。IBM BigInsights实现了它。
检查此博客条目以了解许多模式。
假设您使用的是 Hadoop,计数器也可以在全球范围内使用。
但是,我不明白使用 Map Reduce 解决这个问题的原因。