Hadoop(8) MapReduce-1 MapReduce的详细流程和Shuffle机制的流程


Hadoop(8) MapReduce-1 MapReduce的详细流程和Shuffle机制的流程

MapReduce的详细流程

MapReduce的流程

InputFormat
Shuffle
OutputFormat
Input
Mapper
Reducer
output

整个MapReduce可以分为两个阶段: MapTaskReducetask ,其中Input->Mapper的阶段为MapTask,Reducer->output的阶段为ReduceTask



整个MapReduce详细流程

Mapper

image-20200320205436804

  1. 首先客户端从指定的输入文件夹读取文件信息, 根据参数配置生成一个任务规划(切片规划, 不是真正的切片)
  2. 客户端从服务端获取服务器的部分配置, 和提交路径, 以及一个job的全局唯一ID
  3. 客户端将任务规划发送到Yarn中, Yarn根据任务规划计算出所需的MapTask数量(一个切片对应一个MapTask)
  4. 客户端根据InputFormat(默认是TextInputFormat)里的定义的切片规则将文件切片(split), 每个切片对应一个MapTask
  5. RecorderReader将对应的切片的内容读取成一个个的键值对, 然后将这些键值对传给MapTask
  6. MapTask执行map逻辑(每个键值对调用一次map()方法)
  7. 每个MapTask将输出内容输出到一个缓冲区(内存)
  8. 在缓冲去中对数据进行分区(partition)排序(WritableComparable), 从而根据需求生成不同的分区, 每个分区中的数据是有序的
  9. 在这个缓冲区默认大小为100M(可以通过io.sort.mb来进行调节), 如果到达临界值时会发生溢写(spill), 将缓冲区内的内容写出到磁盘文件中, 如果定义了Combine, 在这时会进行一次combine
  10. 当整个mapper输出结束后, 对所有的溢出文件进行一次归并排序(Merge), 使每个分区的所有内容有序排列, 同时进行合并(Merge)
  11. 合并: 对各个不同文件中相同的分区合成一个分区, 如果定义了Combine, 在这里还会进行一次combine

Reducer

image-20200320220037343

  1. 上面5-11步骤是一个MapTask执行的内容, 当所有MapTask的任务完成之后, 根据MapTask的分区数量, 启动相应数量的ReduceTask(注意是一个分区对应一个ReduceTask, 而不是一个MapTask对弈一个ReduceTask)
  2. ReduceTask将每个分区的内容下载到自己的磁盘
  3. 然后再对不同MapTask传递过来的分区文件再进行一次归并排序
  4. ReduceTask根据**分组规则(GroupingComparator)**进行分组, 然后分组次读入ReduceTask进行处理
  5. ReduceTask处理完数据之后, 根据OutputFormat(默认是TextOutpuFormat)进行输出


Shuffle机制的流程

Shuffle过程指的就是数据从MapTask输出之后, 到达ReduceTask之前的一系列分组, 排序, 合并的过程, 具体Shuffle流程就是上面流程的7-14步, 流程图如下:

image-20200320221344930

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值