MapReduce编程模型简述(mr任务流程)

本文详细介绍了MapReduce的工作流程,从客户端提交job开始,经过YARN分配map任务,map任务处理数据,包括数据读取、分区、排序、溢写和合并,再到reduce任务的执行,包括数据拉取、归并排序、分组和写出数据到HDFS。整个过程涵盖了MapReduce的核心操作和优化策略。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述

1.在客户端执行submit()方法之前,会先去获取一下待读取文件的信息
2.将job提交给yarn,这时候会带着三个信息过去(job.split(文件的切片信息),jar.job.xml)
3.yarn会根据文件的切片信息去计算将要启动的maptask的数量,然后去启动maptask
4.maptask会调用InPutFormat()方法去HDFS上面读取文件,InPutFormat()方法会再去调用RecordRead()方法,将数据以行首字母的偏移量为key,一行数据为value传给mapper()方法
5.mapper方法做一些逻辑处理后,将数据传到分区方法中,对数据进行一个分区标注后,发送到环形缓冲区中
6.环形缓冲区默认的大小是100M,达到80%的阈值将会溢写
7.在溢写之前会做一个排序的动作,排序的规则是按照key进行字典序排序,排序的手段是快排
8.溢写会产生出大量的溢写文件,会再次调用merge()方法,使用归并排序,默认10个溢写文件合并成一个大文件,
9.也可以对溢写文件做一次localReduce也就是combiner的操作,但前提是combiner的结果不能对最终的结果有影响
10.等待所有的maptask结束之后,会启动一定数量的reducetask
11.reducetask会发取拉取线程到map端拉取数据,拉取到的数据会先加载到内存中,内存不够会写到磁盘里,等待所有的数据拉取完毕,会将这些输出在进行一次归并排序
12.归并后的文件会再次进行一次分组的操作,然后将数据以组为单位发送到reduce()方法
13.reduce方法做一些逻辑判断后,最终调用OutputFormat()方法,Outputformat()会再去调用RecordWrite()方法将数据以KV的形式写出到HDFS上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值