【问题标题】:How are key/value pairs distributed in Hadoop when using multiple reducers?使用多个 reducer 时,键/值对如何在 Hadoop 中分布?
【发布时间】:2014-12-24 05:40:28
【问题描述】:

假设我有一份工作,它有许多映射器和多个 reduce 任务。映射器输出的键类型是 WritableComparable。即,对于字数统计示例,假设我有字符串:

"foo foo bar foo bletch quux bar"

当使用单词作为键时,“foo”是否总是分配给同一个reduce,还是有可能不止一个reducer 接收到“foo”?

【问题讨论】:

    标签: hadoop mapreduce reduce


    【解决方案1】:

    MapReduce 总是将键值对传递给reducer,这样与同一个键关联的所有值都会传递给同一个reducer。这是由 MapReduce 期间的partitioner 阶段完成的。

    因此,与foo 关联的所有值都将转到同一个reducer。

    【讨论】:

      【解决方案2】:

      Hadoop 对所有 map 任务的输出进行排序,然后将具有相同键的所有 mapper 输出传输到同一个 reducer 任务。这称为“洗牌”。因此,一个reducer 任务可能正在处理所有“foo”映射器结果,而另一个正在处理所有“bar”映射器结果。如果 "foo" 或 "bar" 是映射器发出的键,那么多个 reducer 将永远不会收到 "foo"。

      【讨论】:

        【解决方案3】:

        正如其他答案中所提到的,MapReduce 总是将键值对传递给减速器,这样与同一键关联的所有值都会转到同一个减速器。

        实际发生的情况是,在分区阶段,对键应用哈希函数,因此使用哈希将它们发送到减速器。因此,所有相似的键最终都会进入同一个 reducer。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-28
          • 1970-01-01
          • 1970-01-01
          • 2013-11-04
          • 2014-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多