Hadoop_ MR JOB 中排序发生在那几个阶段 ?

原文地址:

https://blog.csdn.net/qq_42246689/article/details/84590215

这是一道面试题,由于博主没有怎么写过 MR JOB . 最近在复习所学的知识,刚好整理到 排序问题了。

1.map最后阶段进行partition分区,一般使用job.setPartitionerClass设置的类,如果没有自定义Key的hashCode()方法进行分区。在map阶段写出到环形缓冲区,在环形缓冲区溢写时会进行一次排序,每个分区内部调用job.setSortComparatorClass设置的key的比较函数类进行排序,如果没有则使用Key的实现的compareTo方法。

2.在归并每一个maptask的环形缓冲区的所有溢写文件的时候也会再次进行排序

3.当reduce接收到所有map传输过来的数据之后,对每一个分区的数据进行merge并排序,调用job.setSortComparatorClass设置的key比较函数类对所有数据对排序,如果没有则使用Key的实现的compareTo方法。

4.紧接着使用job.setGroupingComparatorClass设置的分组函数类,进行分组,同一个Key的value放在一个迭代器里面。如果未指定GroupingComparatorClass则则使用Key的实现的compareTo方法来对其分组。

Hadoop1.0中不可避免  hadoop2.0中可以关闭,将reduce task设置为0。
 

发布了519 篇原创文章 · 获赞 1146 · 访问量 283万+

猜你喜欢

转载自blog.csdn.net/u010003835/article/details/105301236