MapReduce的详细工作流程

 Map阶段

 下图为Map阶段详细的工作流程

  1. 根据参数配置,分配一个作业(Job)

  2. 在Job提交之前生成的信息:Job.split(切片信息)、wc.jar(打包后的Jar包)、Job.xml(Job的配置信息)

  3. 启动 MRAppMaster 进程计算出MapTask数量

  4. 当实例化一个maptask后,创建TextInputFormat,调用里面的RecoreReader方法将切片读取封装成(k,v)传送给Mapper

  5. 每输入一次(k,v)Mapper会执行一次map(k,v)方法

  6. 当调用了context.write()方法时,此时会初始化一个outputCollector对象将map输出的key,value收集到缓冲区(MapOutBuffer)中

  7. 当缓冲区达到80%准备将数据溢写到文件之前,会以分区为单位对区内的数据进行快速排序,同时每溢写一次就调一次combiner进行合并

  8. 此时将环形缓冲区的数据溢写到文件(分区且区内有效)

  9. 在Merge归并排序前,如果前面溢写片段的数量 >= 3时,此时会对数据进行combiner合并

  10. 对所有溢写的文件进行Merge归并排序,此时一个maptask结束


Reduce阶段

下图为Reduce阶段详细的工作流程

  1. 所有maptask任务完成后,启动相应数量的reducetask,并告知reducetask处理数据的范围(也就是管哪个分区)
  2. 启动shuffle线程通过网络I/O将数据拷贝到内存中合并,此时如果数据量太大或者shuffle线程不够的话它也会先进行combiner合并一部分溢写到磁盘,最后全部下载到reducetask本地磁盘
  3. 对每个map来的数据并归排序,让其所有数据整体有序
  4. 按照相同key进行分组(GroupingComparator(k,knext))
  5. 使用分组比较器对(key,value)进行迭代,一次读入一组进入reducer(k,v)
  6. 创建TextOutputFormat对象,调用里面的RecoreWriter方法对数据进行写出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值