MapReduce的Shuffle过程

本文详细介绍了MapReduce中的Shuffle过程,包括Map端和Reduce端的shuffle,Partitioner分区机制,Comparable和Comparator的排序机制,Combiner合并机制以及GroupingComparator分组排序。重点讨论了分区数量与reduce数量的关系,自定义分区、排序和分组规则,并通过案例解释了Combiner的应用和分组排序的实现。
摘要由CSDN通过智能技术生成

认识Shuffle

map task:map端可以执行的一个进程

reduce task:reduce端可以执行的一个进程

shuffle是介于maptask和reducetask之间的一个过程

shuffle可以分为map端的shuffle和reduce端的shuffle

mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle

具体来说:就是将map task输出的处理结果数据,分发给reduce task,并在分发的过程中,对数据按key进行了分区和排序。

Shuffle执行过程

在这里插入图片描述

shuffle是MR处理流程中的一个过程,它的每一个处理步骤是分散在各个map task和reduce task节点上完成的。

Map端shuffle

  1. 每个map读取原数据的一部分(inputSplit),执行Mapper操作。
  2. 从Mapper端输出的键值对数据进入到环形缓冲区(100M)
  3. 环形缓冲区容量达到80%产生溢写,写入到磁盘缓冲区。
  4. 在磁盘缓冲区中分区(partitioner), 排序(sort),合并(combiner)

Reduce端shuffle

  1. 由reducetask向maptask拉取数据,进行分组排序(归并算法)
  2. 把数据组合成(key,序列)发送到Reducer类中执行
  3. 在Reducer类中处理数据,把结果写到文件中
    在这里插入图片描述

Partitioner分区机制

根据不同的业务逻辑需求进行不同的数据分区。

分区的数量与reduce数量的关系:分区数量 <= reduce的数量

  1. 分区数量 = reduce数量

    每个reduce找自己相应分区就ok,最理想的状态

  2. 分区数量 < reduce数量

    每个reduce找自己相应分区就ok,但是会有剩余reduce,浪费资源

  3. 分区数量 > reduce数量(不等于1)

    reduce的数量不够分配每个分区的内容,执行代码时报错

  4. 分区数量为n个,reduce数量为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值