mapReduce详细工作流程

@mapReduce详细工作流程

mapReduce详细工作流程

面试的时候对mapreduce过程不是很熟悉,写个文档记录分享一下

工作流程

  1. 读取指定目录下待处理文件,假设数据大小为200M;
  2. 在客户端submit()之前,获取待处理数据的信息,然后根据设置的配置参数,形成一个任务规划,就是切片信息,根据待处理数据文件大小根据参数配置划分为不同的文件,默认是128M进行切分,待处理数据文件就会被切分成两个文件;
  3. 切片完成之后,就会向Yarn提交切片信息(Job.split .jar job.xml);
  4. Yarn收到消息之后会调用ResourceManager创建一个ApplicationMaster(AppMaster)它是负责资源调度的,AppMaster根据提交的信息计算出MapTask的数量,根据例子为两个mapTasks,并启动mapTask;
  5. 启动完mapTask之后,InputFormat里的RecoderReader去读取待处理数据,把数据返回给Mapper,map函数就会根据用户自定义的逻辑进行处理得到新的<k,v>;
  6. 得到新的<k,v>对之后,会有collector进行收据数据;
  7. 收集完成之后就会向一个环形缓冲区中写入数据(环形缓冲区默认大小100M内存)当写道80%的时候就会反向溢写到磁盘中;
  8. 在环形缓冲区中会对数据进行分区 partition,然后再分区内部进行排序(因为不同分区会对应不同的reduceTask所以再内部分区就可以)通过使用快排算法按照字典顺序对key排序。
  9. 完成之后把文件序列化溢写到磁盘形成一个个小文件。
  10. 然后进行merge归并排序,意思时按照分区,对属于同一个分区内的小文件合并之后再进行排序。
  11. 当所有的mapTask完成之后,Appmaster启动相应分区数量的reduceTask处理数据
  12. reduceTask复制mapTask已经归并排序好的数据,将相同分区的数据放在同一个reduceTask的本地磁盘中。
  13. 将不同mapTask中的partition数据复制到同一个reduceTask之后需要在将多个小文件进行合并排序为一个大文件
  14. 然后按照相同key作为一组数据做reduce处理,处理完成之后,然后将最后结果写到指定位置。

在map阶段数据处理完后之后会对数据进行一个分区操作,根据源码分区的算法是:
(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值