我试过实现二次排序。所以我有个问题要问:
Sorting happens 3 times in Hadoop framework
1) Sorting in Buffer ( Sorting occur based on key of a map function)
2) Sorting during merging of spill files of mapper output( ?????????????)
3) Sorting at Reducer side when reducer gets map output from various mapper based on partition logic again merging happens .( Sorting occur based on Sort Comparator )
如果我以上的理解是正确的,那么基于spill文件合并到map输出文件时发生的逻辑排序,它是基于map函数中使用的键或排序比较器上发生的reduce-side排序以及为什么?
1条答案
按热度按时间rryofs0p1#
为了精确地回答这个问题,在缓冲区中,这些值是根据键排序的,在减速器处,它们将使用比较器进行比较。
这就是Map端排序的方式。每个map任务都有一个循环内存缓冲区,它将输出写入其中。当缓冲区的内容达到某个阈值大小时,后台线程将开始将内容溢出到磁盘。
在将数据写入磁盘之前,线程首先将数据划分为与最终将发送到的缩减器相对应的分区。在每个分区中,后台线程执行内存中的按键排序,如果有组合器函数,则在排序的输出上运行。
在减速机上的最终顺序将通过比较每个键和另一个键来完成,这只不过是一个比较器。
为了检验这一点,我编写了一个reverseintwriteable,它将按与intwriteable相反的顺序排列,并且我以同样的方式编写了mapper和reducer的输出。
如果我没有使用reducer,那么输入{(1,xyz),(2,ijk)}将显示为{(1,xyz),(2,ijk)}。如果使用了reducer,则相同输入的输出结果为{(2,ijk),(1,xyz)}。
希望这有帮助。。