hadoop - 洗牌阶段实际上做了什么?

标签 hadoop mapreduce shuffle mapper reducers

洗牌阶段实际上做了什么?

可能性 - A
由于 shuffle 是将 mapper o/p 带到 reducer o/p 的过程,它只是根据 partitioner 中编写的代码将特定键从 mapper 带到特定的 reducer

eg. the o/p of mapper 1 is {a,1} {b,1}

the o/p of mapper 2 is {a,1} {b,1}


在我的分区器中,我已经写了所有以'a'开头的键都将进入reducer 1,所有以'b'开头的键都将进入reducer 2,因此o/p将是:

reducer 1: {a,1}{a,1}

reducer 2: {b,1}{b,1}



可能性 - B
或者与上述过程一起,它是否还对键进行分组:
因此,o/p 将是:

reducer 1: {a,[1,1]}

reducer 2: {b,[1,1]}



在我看来,我认为它应该是 A,因为键的分组必须在排序之后进行,因为排序只是为了让 reducer 可以轻松地指出一个键结束而另一个键开始的时间。如果是,那么 key 分组实际上何时发生,请详细说明。

最佳答案

Mappers 和 Reducers 不是独立的机器,而只是独立的代码。映射代码和归约代码都运行在集群中的同一台机器上。

所以,在集群中的所有机器都运行了mapper之后,结果是:

  • 在节点上本地分箱(将其视为“本地分组”);和,
  • 在集群上的所有节点上随机/重新分配。

  • 将第 2 步视为“全局分组”,因为它是以属于一个键的所有值都转到其分配的唯一节点的方式完成的。

    现在,节点在其内存中的 (key, value) 对上运行 Reducer 代码。

    关于hadoop - 洗牌阶段实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351229/

    相关文章:

    sorting - 二级排序 - 将其留给 Hadoop 框架或在 reducer 中自己完成

    hadoop - 可用于创建数据管道的不同工具

    python - 随机排列numpy数组中的某些行

    java - 为 hadoop MapReduce Cleanup 添加进度跟踪机制

    hadoop - 在 Random Partitioner 中过滤行键上的数据

    java - 多次打乱列表

    python - 在python中以相同的顺序随机播放两个列表

    amazon-web-services - 如何使用 Hadoop 2.6 启动 Spark EC2 集群

    hadoop - 如何在 hive 中验证和匹配不同的日期格式

    java - MapReduce代码清理登台区域错误