【问题标题】:How can I uniformly distribute data to reducers using a MapReduce mapper?如何使用 MapReduce 映射器将数据均匀分布到减速器?
【发布时间】:2014-05-10 23:22:07
【问题描述】:

我对 MapReduce 的了解只有高级别的,但对实现中允许的内容有一个具体的问题。

我想知道 Mapper 是否容易(或可能)在 reducer 之间均匀分布给定的键值对。可能是这样的

(k,v) -> (proc_id, (k,v))

其中proc_id 是处理器的唯一标识符(假设每个键k 都是唯一的)。

核心问题是,如果 reducer 的数量不是固定的(根据输入的大小动态确定;这在实践中是如何完成的吗?),那么映射器如何生成合理的 id?一种方法是让映射器知道键值对的总数。 MapReduce 是否允许映射器拥有这些信息?另一种方法是执行少量额外的计算。

执行此操作的适当方法是什么?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    Reducer 的 key 分配是由 Partitioner 完成的。如果您没有另外指定,默认分区器使用简单的基于 hashCode 的分区算法,当每个键都是唯一的时,该算法往往会非常均匀地分配键。

    我假设您真正想要的是并行处理随机记录组,并且键 k 与记录的分组方式无关。这表明您应该专注于在地图方面进行工作。 Hadoop 非常擅长将输入干净地拆分为并行块以供映射器处理,因此除非您进行某种任意聚合,否则我认为根本没有理由减少。

    您提到的 procId 技术通常用于获取其他严重偏斜的组并取消偏斜(例如,在执行连接操作时)。在您的情况下,密钥几乎毫无意义。

    【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2015-01-18
    • 2023-04-07
    • 2014-06-17
    相关资源
    最近更新 更多