当前位置: 首页 / 技术干货 / 正文
MapReduce的运行流程(二)

2022-11-17

数据 文件 键值 进行

  Map阶段

  MapTask进程启动之后,会根据对应的输入分片来处理数据,每一个分片分配一个MapTask来处理。

好程序员

  使用客户端指定的InputFormat来读取数据,常用的就是LineRecordReader对象。它会逐行读取分片中的数据,并形成一个键值对。键为行偏移量,值为行记录。我们通常称为

  将读取到的键值对数据输入到map方法中,进行用户自己的逻辑处理。并输出键值对,我们称为

  map方法输出的键值对,会被搜集进环形缓冲区。环形缓冲区是内存中的一个字节数组,默认的大小是100M。

  当环形缓冲区中被写入了80%的数据的时候,会将这80%的部分进行分区、排序,并溢写到磁盘,生成一个文件。在这个过程中,如果上游还有数据产生,将存储在剩余的20%的空间内。如果上游产生数据的速度非常快,剩余的20%也被填充满,并且80%的数据还没有溢写完成,此时任务将阻塞,上游不再读取数据,直到溢写文件完成。最终可能会生成多个溢写的磁盘文件。

  将每一个溢写的磁盘文件合并成为一个文件,在合并的过程中,依然会按照分区、Key进行排序。最终,每一个MapTask生成一个磁盘文件。至此,MapTask执行结束。

  Reduce阶段

  每一个ReduceTask需要去处理一个分区的数据,因此ReduceTask需要到每一个MapTask所在的节点去fetch自己分区的数据。

  拉取到的数据,如果比较小,会直接保存在内存中,在内存中完成排序,直到达到内存阈值,将其溢写到文件中;如果比较大,会直接以文件的形式保存起来。

  数据拉取完成后,会按照设定好的合并因子进行合并。

  按照Map阶段输出的的键进行分组,将相同键所对应的所有的值聚合到一起,形成一个集合。

  将分组之后的键值对>,输入到Reduce方法中,进行逻辑处理。并输出最终的结果

  将最终的结果,由客户端指定的OutputFormat进行输出。至此ReduceTask结束。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号