我尝试过实施二级排序.
所以我有一个与此相关的问题:
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 )
如果我的上述理解是正确的,那么基于在地图输出文件上合并溢出文件期间发生的逻辑排序,它基于我们在地图函数或排序比较器中使用的键,减少侧排序发生,为什么?
最佳答案 为了准确回答,在缓冲区中,值是根据键排序的,而在减速器处,它们将使用比较器进行比较.
这就是地图结束时的排序方式.
每个map任务都有一个循环内存缓冲区,用于将输出写入.当缓冲区的内容达到某个阈值大小时,后台线程将开始将内容溢出到磁盘.
在写入磁盘之前,线程首先将数据划分为与最终将被发送到的reducer相对应的分区.
在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,则在排序的输出上运行.
减速器的最终订单将通过将每个键与另一个键进行比较来完成,这只是一个比较器.
为了检验这一点,我编写了一个ReverseIntWritable,它将与IntWritable反向排序,并且我已经从mapper和reducer中以相同的方式编写了输出.
如果我没有使用reducer,输入{(1,xyz),(2,ijk)}出现为{(1,xyz),(2,ijk)}.
如果我使用了reducer,则相同输入的输出为{(2,ijk),(1,xyz)}.
希望这可以帮助..