首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在hadoop流mapreduce中使用一个组合器(使用mrjob)

在hadoop流mapreduce中使用一个组合器(使用mrjob)
EN

Stack Overflow用户
提问于 2014-09-03 04:52:07
回答 1查看 2.2K关注 0票数 1

当我被教授关于mapreduce的时候,其中一个关键的组件是组合器。它是映射器和减速器之间的一个步骤,在map阶段结束时基本上运行减速器,以减少映射器输出的数据行数。随着我需要处理的数据的大小增加(在多兆字节的范围内),减少步骤变得非常慢。我和我的一位朋友谈过,他说这也是他的经验,他没有使用组合器,而是使用一个散列函数来划分他的约简键,它减少了在减少步骤中每个键的值的数量。我试过了而且成功了。有没有其他人有过这样的经验,组合步骤没有很好的缩放,为什么我找不到这个问题的任何文档以及解决办法?如果有一种方法可以实现组合步长,我宁愿不使用解决办法。

编辑这里是我朋友建议的解决方法的一个例子,它的工作速度比组合器快得多:

而不是输出word, count

映射器输出(word, hash(timestamp) % 1024), count

然后有两个简化步骤来合并映射程序的结果。

EN

回答 1

Stack Overflow用户

发布于 2014-09-03 04:59:46

我认为这是不同的事情,没有解决办法。

  • 只有当所述计算允许部分约简(即从键的部分元组发出中间结果)并使用减少步骤组合中间结果时,组合器才适用。求和或平均值很容易用一个组合器进行,其他算法则不然。
  • 减少步骤的性能(可伸缩性)在很大程度上取决于键分区函数如何将唯一的映射输出键映射到减缩器插槽。一个好的分区人员应该给每个减速工分配相同的工作量。

随着我需要处理的数据的大小增加(在多兆字节的范围内),减少步骤变得非常慢。

MR范式并没有固有的特点,它使得缩减步骤没有规模。不过,您的算法可能不能很好地映射到MapReduce。如果你能提供更多关于你具体在做什么的信息,我们可以帮助弄清楚。

他使用一个散列函数来划分他的约简键,该函数减少了约简步骤中每个键的值的数量。

这对我来说毫无意义。在键上使用散列函数只能增加每个桶的值数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25636467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档