开发者社区> 问答> 正文

MapReduce 中排序发生在哪几个阶段?这些排序可以避免吗?

MapReduce 中排序发生在哪几个阶段?这些排序可以避免吗?

展开
收起
芯在这 2021-12-05 21:47:13 505 0
1 条回答
写回答
取消 提交回答
  • 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中可以关闭,将reducetask设置为0

    2021-12-05 21:47:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载