我尝试过实现辅助排序。所以我有一个与此相关的问题:
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 )
如果我以上的理解是正确的,那么基于在映射输出文件上合并溢出文件时发生的逻辑排序,它是基于我们在映射函数或排序比较器中使用的键,在这些键上会发生减少侧排序,为什么?
要准确回答,在缓冲区中,值是根据键排序的,在reducer中,它们将使用比较器进行比较。
这就是映射端排序的方式。每个映射任务都有一个循环内存缓冲区,它将输出写入缓冲区。当缓冲区的内容达到某个阈值大小时,后台线程将开始将内容溢出到磁盘。
在写入磁盘之前,线程首先将数据划分为与最终要发送到的还原器相对应的分区。在每个分区中,后台线程按键在内存中执行排序,如果有组合器功能,则在排序的输出上运行
减速器的最终顺序将通过将每个键与另一个键进行比较来完成,这只是一个比较器。
为了检查这一点,我编写了一个ReverseIntWritable,它的顺序与IntWritaable相反,并且我以相同的方式编写了mapper和reducer的输出。
如果我没有使用归约器,那么输入{(1,xyz),(2,ijk)}就变成{(2,jk)}。如果我使用了reducer,那么相同输入的输出为{(2,ijk),(1,xyz)}。
希望这能有所帮助。。