Mapper和Reducer如何一起“无”排序地工作?

时间:2019-05-29 22:56:25

标签: hadoop hadoop-streaming hadoop-partitioning

我知道地图如何缩小工作原理以及我有哪些步骤:

  • 映射
  • 随机播放和排序
  • 减少

当然,我有分区,组合器,但是现在这并不重要。

有趣的是,当我运行map reduce作业时,看起来像mappers和reducers并行工作:

enter image description here

所以我不知道怎么可能。

问题1。 如果我有多个正在执行映射操作的节点,那么reducer如何开始工作?因为 Reducer不能在没有正确排序的情况下开始工作?(必须为Reducer排序输入-如果映射器仍在工作,则无法对输入进行排序)。

问题2。 如果我有多个reducer,最终数据将如何合并在一起?换句话说,最终结果应该排序吗?这意味着我们要花费额外的O(n * Log n)时间来合并“多个reducer结果?”

1 个答案:

答案 0 :(得分:1)

Reducer可以在它们可用后立即开始从映射器复制结果。这称为reduce任务的 copy阶段(请参见Hadoop权威指南的第7章MapReduce的工作原理)。
也是从那里:

  

...复制所有地图输出后,reduce任务移至    sort 阶段(应适当地称为 merge 阶段,例如   排序是在地图端进行的),它合并了地图   输出,保持其排序顺序。这是一轮完成的...