我很困惑,因为我找到了两个答案。
1(根据Hadoop权威指南 - 第3版,第6章 - 地图边说:"在写入磁盘之前,线程首先将数据划分为对应于最终将发送到的化简器的分区。在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,则在排序的输出上运行。
2(雅虎开发人员教程(Yahoo教程(说Combiner在分区程序之前运行。
谁能澄清哪个先运行。
Map Reduce 作业可能包含其中一个或所有这些阶段
-
地图
-
合
-
随机播放和排序
-
减少
Partitioner
适合第二阶段和第三阶段
您可以访问此链接了解更多详情。
在阅读了相关的SE问题和文章后,
哪个先运行:分区程序还是合并器?
谁将有机会先执行,合路器还是分区器?
https://sreejithrpillai.wordpress.com/2014/11/24/implementing-partitioners-and-combiners-for-mapreduce/
我们可以看到意见分歧。
但从逻辑上讲,我觉得
- 映射器将输出写入内存中的圆形环形缓冲区
- 如果化简器数量大于 1 并且分区器已到位,则映射器输出将被分区
- 缓冲区内存已满后,输出将溢出到磁盘
- 根据Hadoop权威指南"在每个分区内,后台线程按键执行内存中排序,如果有组合器函数,则在排序的输出上运行">
这意味着分区程序应该首先运行,合并器必须在每个分区中的输出数据上运行。