哪个在MapReduce作业中首先运行,组合器或分区程序

时间:2016-02-04 07:35:34

标签: hadoop mapreduce hdfs

我很困惑,因为我找到了两个答案。

1)根据Hadoop权威指南 - 第3版,第6章 - Map Side说:"在写入磁盘之前,线程首先将数据划分为与最终将被发送的reducer相对应的分区至。在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,则在排序的输出上运行。

2)雅虎开发人员教程(Yahoo tutorial)表示Combiner在分区之前运行。

任何人都可以先澄清哪个先运行。

1 个答案:

答案 0 :(得分:7)

Map Reduce Job可能包含一个或所有这些阶段

  1. 地图

  2. 联合

  3. 随机播放

  4. 减少

  5. Partitioner适合第二阶段和第三阶段

    您可以访问此link了解详情。

    在完成相关的SE问题后文章,

    What runs first: the partitioner or the combiner?

    Who will get a chance to execute first , Combiner or Partitioner?

    https://sreejithrpillai.wordpress.com/2014/11/24/implementing-partitioners-and-combiners-for-mapreduce/

    我们可以看到意见分歧。

    但从逻辑上讲,我觉得

    1. 映射器将输出写入内存中的循环缓冲区
    2. 如果减速器数量超过1&分区器就位,映射器输出将被分区
    3. 缓冲存储器已满后,输出将溢出到磁盘
    4. 根据hadoop权威性指南“在每个分区中,后台线程按键执行内存中排序,如果有组合器功能,则在排序的输出上运行”
    5. 这意味着Partitioner应首先运行,并且组合器必须在每个分区中使用输出数据运行。