hadoop map 中的全局值减少

Posted

技术标签:

【中文标题】hadoop map 中的全局值减少【英文标题】:Global values in hadoop map reduce 【发布时间】:2013-03-18 22:38:46 【问题描述】:

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

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

知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢普拉文。这真的很有帮助!【参考方案2】:

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

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

【讨论】:

欢迎来到 Stack Overflow!像这样的东西更适合作为评论,当你达到 50 声望时,你就可以发表评论了。

以上是关于hadoop map 中的全局值减少的主要内容,如果未能解决你的问题,请参考以下文章

Map 中的 Pair 类减少抛出错误

计算最终地图中的总行数减少hadoop中的输出

Hadoop Map Reduce - Iterable上的嵌套循环 reduce中的值忽略将文本写入上下文时的文本结果

Hadoop map减少了java

Hadoop Map Reduce 程序

Hadoop Map减少代码的前N个值