【问题标题】:Shuffling in Map-ReduceMap-Reduce 中的洗牌
【发布时间】:2019-07-23 07:41:19
【问题描述】:

我正在用 java(没有 Hadoop)编写一个 map-reduce 程序,只是为了练习。 经典字数。 每个地图(我有多个并行运行的地图)都会生成一个键值数据,如下所示: 谢谢, 1 爪哇,4 上下文,1 你,1 在, 2 ……,……

现在我必须打乱映射结果并将它们发送到 reduce 任务,但我不知道该怎么做。 我的第一个想法是按照字母顺序拆分 map 的输出,例如,从 a 到 d 的单词发送到第一个 reducer。从 e 到 h 的单词被发送到第二个 reducer,以此类推。

我不确定这是个好主意。单词分布不规则,因此某些减速器可能会比其他减速器接收更多负载。 一种解决方案可能是某种哈希,在这种情况下可以使用 HashMap 的哈希?

有没有更好的方法?

【问题讨论】:

    标签: java mapreduce


    【解决方案1】:

    您可以对键值使用散列函数。 像这样的东西: hc = k.hashCode();.

    hashCode 返回一个整数,它的值从负数到正数(Integer.MIN_VALUE 到 Integer.MAX_VALUE),所以如果你用它来计算索引值来调用正确的 reduce 函数,请使用hc = k.hashCode() & 0xffffffff。按位和函数 (&) 屏蔽第一位,即位符号。

    hash 冲突没有问题(不同key的hash返回相同的值),重要的是同一个key有相同的hash。

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多