gpt4 book ai didi

hadoop - 在 hadoop streaming mapreduce 中使用组合器(使用 mrjob)

转载 作者:可可西里 更新时间:2023-11-01 16:14:08 25 4
gpt4 key购买 nike

当我学习 mapreduce 时,其中一个关键组件是组合器。它是映射器和缩减器之间的一个步骤,本质上是在映射阶段结束时运行缩减器,以减少映射器输出的数据行数。随着我需要处理的数据量的增加(数 TB 规模),reduce 步骤变得异常缓慢。我和我的一个 friend 谈过,他说这也是他的经验,他没有使用组合器,而是使用散列函数对其 reduce 键进行分区,该函数减少了 reduce 步骤中每个键的值数量.我试过了,它奏效了。有没有其他人有过组合器步骤不能很好地扩展的经验,为什么我找不到这个问题的任何文档以及解决方法?如果有办法使组合器步进缩放,我宁愿不使用解决方法。

[编辑]这是我 friend 建议的解决方法的示例,它比组合器工作得更快:

而不是输出word,count

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

然后有 2 个 reduce 步骤来合并 mapper 的结果。

最佳答案

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

  • Combiner 适用于所讨论的计算允许部分缩减,即从键的部分元组发出中间结果,并使用 reduce 步骤合并中间结果。使用组合器可以轻松地对值求和或取平均值,而其他算法则不然。

  • Reduce 步骤的性能(可扩展性)在很大程度上取决于键分区函数将唯一映射输出键映射到 reducer 插槽的程度。一个好的分区器应该为每个 reducer worker 分配相同的工作负载。

As the size of the data I need to process increases (at the muti-terabyte scale), the reduce step becomes prohibitively slow

MR 范例没有任何内在的东西可以使 Reduce 步骤无法扩展。不过,您的算法可能无法很好地映射到 MapReduce。如果您可以提供更多关于您具体在做什么的信息,我们可以帮助您弄清楚。

he partitions his reduce key using a hash function which reduces the number of values that go to each key in the reduce step

这对我来说没有意义。在键上使用哈希函数只能增加进入每个桶的值的数量。

关于hadoop - 在 hadoop streaming mapreduce 中使用组合器(使用 mrjob),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25636467/

25 4 0