在MapReduce作业中首先运行Combiner或Partitioner

avi*_*ash 1 hadoop mapreduce hdfs

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

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

2)雅虎开发人员教程(雅虎教程)称Combiner在分区之前运行.

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

Rav*_*abu 7

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

  1. 地图

  2. 结合

  3. 随机和排序

  4. 降低

Partitioner 适合第二和第三阶段

您可以访问此链接了解更多详情.

在浏览了相关的SE问题和文章后,

首先运行的是:分区器还是组合器?

谁将有机会先执行,合并者或分区者?

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

我们可以看到意见分歧.

但从逻辑上讲,我觉得这样

  1. 映射器将输出写入内存中的循环环形缓冲区
  2. 如果减少器数量大于1并且分区器已到位,则将对映射器输出进行分区
  3. 一旦缓冲存储器已满,输出将溢出到磁盘
  4. 根据hadoop权威指南"在每个分区内,后台线程按键执行内存中排序,如果有组合器功能,则在排序输出上运行"

这意味着Partitioner应首先运行,并且组合器必须在每个分区中使用输出数据运行.